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

我必须拥有实体: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限制,例如通过添加A

public Set<AGroup> getAsGroup() {
    return Collections.unmodifiableSet(AsGroup);
}


但是,当我这样做时(出于明显的原因),我在AGroup中的方法(addAremoveA)将无法工作。如何阻止AGroup中所有来源的方法对A进行的修改?我只想从一个方向添加/删除集合中的实体。在A中,我只想查看AsGroup中的实体。

最佳答案

你可能有:



boolean addA(A a) {
    return AsGroup.add(a);
}

boolean removeA(A a) {
    return AsGroup.remove(a);
}


然后只能在此程序包中访问此方法。如果您在软件包上分配了适当的类,则此解决方案应该可以。

07-26 08:57