我想不出更好的问题,如果我错了,请纠正我。
我必须拥有实体:A和AGroup(在数据库中,它们通过关联的第三张表连接)
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);
}
那也行得通。现在您可以看到,我正在从AGroup中的A方法添加到Set中。现在我想对A中的
AsGroup
施加READONLY限制,例如通过添加Apublic Set<AGroup> getAsGroup() {
return Collections.unmodifiableSet(AsGroup);
}
但是,当我这样做时(出于明显的原因),我在AGroup中的方法(
addA
和removeA
)将无法工作。如何阻止AGroup中所有来源的方法对A进行的修改?我只想从一个方向添加/删除集合中的实体。在A中,我只想查看AsGroup
中的实体。 最佳答案
你可能有:
boolean addA(A a) {
return AsGroup.add(a);
}
boolean removeA(A a) {
return AsGroup.remove(a);
}
然后只能在此程序包中访问此方法。如果您在软件包上分配了适当的类,则此解决方案应该可以。