Java Hibernate在获取集合时清除@ManyToMany JoinTable

Java Hibernate在获取集合时清除@ManyToMany JoinTable,java,hibernate,many-to-many,jointable,Java,Hibernate,Many To Many,Jointable,有两个有很多关系的Anotate类。当我尝试读取链接集合时,Hibernate将返回正确的数据,但在这之后,将删除joinTable中与对象连接的所有行。因此,在读取对象之间的所有连接之后,对象之间的所有连接都将丢失 班级地区有: private Set<UserFilter> filters = new HashSet<UserFilter>(); @ManyToMany(fetch = FetchType.LAZY, mappedBy = "regions") p

有两个有很多关系的Anotate类。当我尝试读取链接集合时,Hibernate将返回正确的数据,但在这之后,将删除joinTable中与对象连接的所有行。因此,在读取对象之间的所有连接之后,对象之间的所有连接都将丢失

班级地区有:

private Set<UserFilter> filters = new HashSet<UserFilter>();


@ManyToMany(fetch = FetchType.LAZY, mappedBy = "regions")
public Set<UserFilter> getFilters() {
    return filters;
}

public void setFilters(Set<UserFilter> filters) {
    this.filters = filters;
}
类UserFilter具有:

private Set<Region> regions = new HashSet<Region>();


@ManyToMany(fetch = FetchType.LAZY, cascade =
        {
                javax.persistence.CascadeType.PERSIST,
                javax.persistence.CascadeType.MERGE,
                javax.persistence.CascadeType.REFRESH,
                javax.persistence.CascadeType.DETACH
        })
@JoinTable(name = "FilterAndRegion",
        joinColumns = {@JoinColumn(name = "FilterId", nullable = false, updatable = false)},
        inverseJoinColumns = {@JoinColumn(name = "RegionId", nullable = false, updatable = false)})
public Set<Region> getRegions() {
    return regions;
}

public void setRegions(Set<Region> regions) {
    this.regions = regions;
}
当我运行这样的程序时:

private void updateRegionsTable() {
        //
        regionsTable.removeAllItems();
        //
        if(filter.getRegions().size() == 0 ) {
            regionsTable.addItem(new Object[]{
                            "<no regions>",
                    },
                    0
            );
        } else {
            //
            for (Region region : filter.getRegions()) {
                //
                regionsTable.addItem(new Object[]{
                                region.getName(),
                        },
                        region.getId()
                );
            }
        }
        //
        regionsTable.setPageLength(regionsTable.size());
    }
。。。在控制台中,我看到:

休眠:选择regions0\u0.FilterId作为FilterId1\u4\u0\u0, regions0\u.RegionId为RegionId2\u 0\u,region1\u.id为id1\u 2\u 1\u, 区域1。目录名称为目录2\u 2\u 1\u,区域1\u。名称为名称3\u 2\u 1\u, 区域1。从筛选器中键入类型4\u 2\u 1\u区域0\u内部联接 Region0上的region1\uu0.RegionId=region1\u0.id,其中 regions0\u0.FilterId=

休眠:从FilterId=


为什么会发生这种情况?如何纠正这种行为以清除joinTable?

它来自您没有向我们展示的代码,它位于循环之后。您必须以某种方式替换或清除区域集合。函数的完整代码如下所示:“private void updateRegionsTable{regionsTable.removeAllItems;iffilter.getRegions.size==0{regionsTable.addItemnew Object[]{,},0;}else{for Region Region Region:filter.getregionstable.addItemnew Object[]region.getName,},region.getId;}}regionsTable.setPageLengthregionsTable.size;}'和休眠设置:Hibernate.current\u session\u context\u class=thread Hibernate.enable\u lazy\u load\u no\u trans=true(如果有帮助的话)…不要在注释中发布代码。编辑您的问题。我已将函数代码添加到问题。