Java 定向@manytomy,但I';我希望其中一方返回不可修改(只读)集

Java 定向@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

我想不出更好的问题了,所以如果我错了,请纠正我

我必须访问实体:A和AGroup(在DB中,它们通过第三个关系表连接)

A.java

[...]
    @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);
}