【发布时间】:2016-02-15 02:57:17
【问题描述】:
我正面临这个“逻辑错误”:
我有一个 UserGroup 模型与 @ManyToMany 关系中的 SectionPermission 表相关。 UserGroup 模型扩展了 BaseModel @MappedSuperclass。
UserGroup 类@ManyToMany:
@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;
}
SectionPermissionClass @ManyToMany:
@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_section_permission 表时,Hibernate 会删除集合并重新插入每条记录!
我发现了这个question,似乎是一个等于/哈希码问题。这是我在应用程序的每个模型中实现的代码:
BaseModel 类
@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())));
}
任何关于我做错了什么的建议?
【问题讨论】:
-
ID怎么可能为空?
-
当我创建一个模型时,ID 为空,只有在保存时才会填充
标签: java mysql hibernate model-view-controller