2014-06-23 3 views
1

내가 잘못하면 더 나은 질문을 할 수 없으므로 올바른 것으로 생각합니다.방향 @ManyToMany하지만 한쪽이 수정 불가능한 (읽기 전용) 집합을 반환하고 싶습니다

내가 엔티티가 : A와 AGroup

[...] 
    @ManyToMany(mappedBy = "As") 
    private Set<AGroup> AsGroup = new HashSet<AGroup>(); 
[...] 

AGroup.java

[...] 
    @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH }, fetch = FetchType.EAGER) 
    @JoinTable(schema = "ars", name = "a_group_rel", 
      joinColumns = { @JoinColumn(name = "group_id") }, 
      inverseJoinColumns = { @JoinColumn(name = "a_id") }) 
    private Set<A> As= new HashSet<A>(); 
[..] 

A.java (DB 그들이 3 테이블을 통해 연결되어 관계형 먹으 렴)

Ofc thats thats는 내가하는 것을 의미하는 것이 아닙니다.

public void addA(A a) { 
     if (a == null) { 
      return; 
     } 

     if (!As.contains(a)) { 
      As.add(a); 
     } 

     if (!a.getAsGroup().contains(this)) { 
      a.getAsGroup().add(this); 
     } 
    } 

    public void removeA(A a) { 
     as = new HashSet<A>(As); 
     as.remove(A); 
     a.getAsGroup().remove(this); 
    } 

    public Set<A> getAs() { 
     return Collections.unmodifiableSet(As); 
    } 

을 그리고도 작동합니다

AGroup.java
에서 나는 또한이 같은 somethink있다. 이제 보시다시피, AAGroup에서 Set에 추가됩니다. 지금은 AsGroup에 대한 읽기 전용 제한을 넣어하고자하는

public Set<AGroup> getAsGroup() { 
    return Collections.unmodifiableSet(AsGroup); 
} 

에 추가하여 예 그러나 나는 AGroup (addAremoveA에 (분명한 이유) 내 방법이 작업을 수행 할 때) 작동 안 할 것이다. 내가 어떻게 수정을 차단할 수 있습니까 에있는 모든 소스 exept 메소드에서 AGroup? 내 세트에서 하나의 방향에서만 엔터티를 추가/제거하고 싶습니다. 에서 나는 단지 AsGroup 엔티티를보고 싶어요.

boolean addA(A a) { 
    return AsGroup.add(a); 
} 

boolean removeA(A a) { 
    return AsGroup.remove(a); 
} 

를 그리고이 방법은이 패키지에 액세스 할 수 있습니다 :

답변

0

당신은 할 수 있습니다. 패키지에 대해 적절한 클래스 분배가있는 경우이 솔루션은 정상입니다.

+0

후속 조치를 취하지 않습니다. 이 방법을 어디에 넣고 싶니? ** AsGroup의 ** 원인 **으로 가정합니다. ** AsGroup에서 As **를 제거 할 수 없습니다 ** AsGroup ** As가 아닙니다. 어떻게 이런 문제가 해결 되었습니까? ** AsGroup ** 메소드에서 그룹을 추가하려면 ** A **에서 수정 가능한 세트를 반환해야합니다. – ojciecmatki

+0

A 클래스 –

+0

에 넣으십시오.하지만 ** A **의 AsGroup에서 AsGroup beans를 보유하기를 원합니다. 거기에 ** ** 추가 할 수 없습니다. addAsGroup (AsGroup asGroup)으로 변경하더라도 누군가 ** A **를 선언하면이 메소드는 다른 곳에서 액세스 할 수 있습니다. 나는 당신의 솔루션을 얻지 못하고 어떻게 도움이 될지, 어떤 정보는 좋을 것이다;) 부울 메소드는 패키지에서만 접근 가능하다. 비록 이것이 어떻게 든 작동하더라도 (나는 지금 어떻게 든 이해할 수 없다.) a.getAsGroup()은이 집합을 수정할 수있을 것이다. – ojciecmatki