我想不出更好的问题,如果我错了,请纠正我。
我需要实体:A和AGroup(在DB中,它们通过第3个表关联连接)
A.java
[...]
@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>();
[..]
Ofc认为那不是我想要完成的工作。
在 AGroup.java 中,我也有一些想法:
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);
}
这也有效。现在您可以看到我从 A组方法中添加了 A 中的Set。现在我想在 A 中对AsGroup
加上READONLY限制,例如添加 A
public Set<AGroup> getAsGroup() {
return Collections.unmodifiableSet(AsGroup);
}
但是当我这样做时(出于显而易见的原因), AGroup (addA
和removeA
)中的方法将无效。如何阻止来自所有来源的 A 中的修改,以及 AGroup 中的方法?我想在我的集合中添加/删除实体,但只能从一个方向添加/删除实体。在 A 中,我只想查看AsGroup
中的实体。
答案 0 :(得分:0)
你可能有:
boolean addA(A a) {
return AsGroup.add(a);
}
boolean removeA(A a) {
return AsGroup.remove(a);
}
然后这个方法只能在这个包中访问。如果你有适当的类分发包,那么这个解决方案应该没问题。