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 (addA
및 removeA
에 (분명한 이유) 내 방법이 작업을 수행 할 때) 작동 안 할 것이다. 내가 어떻게 수정을 차단할 수 있습니까 에있는 모든 소스 exept 메소드에서 AGroup? 내 세트에서 하나의 방향에서만 엔터티를 추가/제거하고 싶습니다. 에서 나는 단지 AsGroup
엔티티를보고 싶어요.
boolean addA(A a) {
return AsGroup.add(a);
}
boolean removeA(A a) {
return AsGroup.remove(a);
}
를 그리고이 방법은이 패키지에 액세스 할 수 있습니다 :
후속 조치를 취하지 않습니다. 이 방법을 어디에 넣고 싶니? ** AsGroup의 ** 원인 **으로 가정합니다. ** AsGroup에서 As **를 제거 할 수 없습니다 ** AsGroup ** As가 아닙니다. 어떻게 이런 문제가 해결 되었습니까? ** AsGroup ** 메소드에서 그룹을 추가하려면 ** A **에서 수정 가능한 세트를 반환해야합니다. – ojciecmatki
A 클래스 –
에 넣으십시오.하지만 ** A **의 AsGroup에서 AsGroup beans를 보유하기를 원합니다. 거기에 ** ** 추가 할 수 없습니다. addAsGroup (AsGroup asGroup)으로 변경하더라도 누군가 ** A **를 선언하면이 메소드는 다른 곳에서 액세스 할 수 있습니다. 나는 당신의 솔루션을 얻지 못하고 어떻게 도움이 될지, 어떤 정보는 좋을 것이다;) 부울 메소드는 패키지에서만 접근 가능하다. 비록 이것이 어떻게 든 작동하더라도 (나는 지금 어떻게 든 이해할 수 없다.) a.getAsGroup()은이 집합을 수정할 수있을 것이다. – ojciecmatki