Java Hibernate更新会导致删除并重新插入集合
我面临着这个“逻辑错误”: 我有一个与Java Hibernate更新会导致删除并重新插入集合,java,mysql,hibernate,model-view-controller,Java,Mysql,Hibernate,Model View Controller,我面临着这个“逻辑错误”: 我有一个与@manytomy关系中的SectionPermission表相关的UserGroup模型。UserGroup模型扩展了BaseModel@MappedSuperclass 用户组类@manytomy: @ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) @JoinTable(name = "user_section_permission", joinColumns = {
@manytomy
关系中的SectionPermission
表相关的UserGroup
模型。UserGroup
模型扩展了BaseModel@MappedSuperclass
用户组类@manytomy
:
@ManyToMany(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
@JoinTable(name = "user_section_permission", joinColumns = {
@JoinColumn(name = "id_user_group", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "id_section_permission",
nullable = false, updatable = false)})
public List<SectionPermission> getSectionPermissions() {
return sectionPermissions;
}
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
@JoinTable(name = "user_section_permission", joinColumns = {
@JoinColumn(name = "id_section_permission", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "id_user_group",
nullable = false, updatable = false)})
public List<UserGroup> getUserGroups() {
return userGroups;
}
当我在此模型上执行更新时,更新user\u section\u权限
表Hibernate将删除集合并重新插入每个记录
我发现这似乎是一个equals/hashcode问题。这是我在应用程序的每个模型中实现的代码:
基本模型类
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if (!(object instanceof BaseModel)) {
return false;
}
BaseModel other = (BaseModel) object;
return !((getId() == null && other.getId() != null) || (getId() != null && !getId().equals(other.getId())));
}
任何其他类别
@Override
public int hashCode() {
int hash = 0;
hash += (getId() != null ? getId().hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
if(!(object instanceof UserGroup)) {
return false;
}
Model other = (Model) object;
return !((getId() == null && other.getId() != null) || (getId() != null && !getId().equals(other.getId())));
}
有没有任何关于我做错了什么的建议?问题是,您将equals和hashcode基于id,我假设id是自动生成的。这种组合对我所知道的任何ORM都不起作用 我建议您阅读这篇文章,其中解释了Hibernate如何使用equals和hashcode以及需要注意的事项 其中一个解决方案是提供ID(可能使用UUID)或编写基于业务平等性而非数据库平等性的equals/hashcode
大多数情况下,您不需要重写equals/hashcode。。。您使用的是
List
s,因此可能根本不需要它们。ID怎么可能为空?当我显示模型时,ID为空,仅在保存时填充