Java Hibernate在获取集合时清除@ManyToMany JoinTable
有两个有很多关系的Anotate类。当我尝试读取链接集合时,Hibernate将返回正确的数据,但在这之后,将删除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
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(如果有帮助的话)…不要在注释中发布代码。编辑您的问题。我已将函数代码添加到问题。