Java 定向@manytomy,但I';我希望其中一方返回不可修改(只读)集
我想不出更好的问题了,所以如果我错了,请纠正我 我必须访问实体:A和AGroup(在DB中,它们通过第三个关系表连接) A.javaJava 定向@manytomy,但I';我希望其中一方返回不可修改(只读)集,java,hibernate-mapping,Java,Hibernate Mapping,我想不出更好的问题了,所以如果我错了,请纠正我 我必须访问实体:A和AGroup(在DB中,它们通过第三个关系表连接) A.java [...] @ManyToMany(mappedBy = "As") private Set<AGroup> AsGroup = new HashSet<AGroup>(); [...] [...] @ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.R
[...]
@ManyToMany(mappedBy = "As")
private Set<AGroup> AsGroup = new HashSet<AGroup>();
[...]
[...]
@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>();
[..]
但当我这样做时(出于明显的原因),我在AGroup(addA
和removeA
)中的方法将无法工作。如何在A中阻止所有来源的修改,在AGroup中排除方法?我想在集合中添加/删除实体,但仅从一个方向添加/删除实体。在A中,我只想查看AsGroup
中的实体,您可能有:
boolean addA(A a) {
return AsGroup.add(a);
}
boolean removeA(A a) {
return AsGroup.remove(a);
}
然后这个方法将只能在这个包中访问。如果在包上有适当的类分布,这个解决方案应该可以。我不跟进。你想把这些方法放在哪里?我认为这是一个群体的原因。我无法从AsGroup中删除,因为它持有AsGroup而不是。那么这如何解决我的问题呢?为了在AsGroup方法中添加group,我仍然必须在A中返回可修改集。但我希望A中的AsGroup保留AsGroup bean。我无法在那里添加A。即使我将其更改为addAsGroup(AsGroup AsGroup),如果有人声明A,此方法也可以在其他地方访问。我不了解您的解决方案及其帮助,请提供一些信息;)布尔方法只能在包中访问?更不用说,即使它以某种方式起作用(我现在不明白为什么),调用a.getAsGroup()的人也可以修改这个集合
public Set<AGroup> getAsGroup() {
return Collections.unmodifiableSet(AsGroup);
}
boolean addA(A a) {
return AsGroup.add(a);
}
boolean removeA(A a) {
return AsGroup.remove(a);
}