我有3个简单的表
权限 - 权限(varchar)-pk
用户 - UserName(varchar)PK,密码
当局 - 用户名(FK),权限(FK)。 (请注意权限和权限。)
我的问题是当我尝试在权限表中插入重复记录时,该记录被删除(我看到hibernate生成的删除查询)。但父表( USERS )中的行不受影响。
这是Hibernate-Queries,当插入Fresh记录时(在Authorities中)..说值 XYZ ,日志看起来像这样。
Hibernate:插入USERS(PASSWORD,ENABLED,USERNAME)值(?,?,?)
Hibernate:插入AUTHORITIES(USERNAME,AUTHORITY)值(?,?)
现在,如果我再次尝试插入相同的记录..这就是我得到的
Hibernate:从USERNAME =?
的权限中删除 @Entity
@Table(name="AUTHORITIES")
public class AuthoritiesValue {
@EmbeddedId
private AuthoritiesValuePk id;
@ManyToOne(fetch = FetchType.LAZY,targetEntity = UserValue.class)
@Cascade({CascadeType.SAVE_UPDATE})
@JoinColumn(name="USERNAME",insertable = false, updatable = false)
private UserValue userValue;
//getters-setters
UserValue实体
@Entity
@Table(name = "USERS")
public class UserValue {
@Id
@Column(name = "USERNAME")
private String username;
@Column(name = "PASSWORD")
private String password;
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name="authorities",
joinColumns = @JoinColumn(name = "USERNAME", referencedColumnName = "USERNAME"),
inverseJoinColumns = @JoinColumn(name = "AUTHORITY", referencedColumnName = "AUTHORITY"))
@NotFound(action = NotFoundAction.IGNORE)
private List<RoleValue> roles;
public List<RoleValue> getRoles() {
return roles;
}
public void setRoles(List<RoleValue> roles) {
this.roles = roles;
}
public String toString() {
//implementation
}
@Override
public int hashCode() {
//implementation
}
@Override
public boolean equals(Object obj) {
//implementation
}
}
我做错了什么(可能是级联)?我使用的Cascade和CascadeType是Hibernate导入而不是JPA-persitance。
另请注意,USERVALUE实体之前已经有人写过。请参阅那里的@ManyToMany映射。我不确定它是如何工作的。表权限定义了连接,但为表权限(与权限不同)定义了(已编写的) RoleValue 实体
@Entity
@Table(name = "authority")
public class RoleValue {
@Id
@Column(name = "authority")
private String rolename;
@ManyToMany(fetch = FetchType.LAZY, mappedBy = "roles")
@NotFound(action = NotFoundAction.IGNORE)
private List<UserValue> users;
public RoleValue() {}
//SETTERS-GETTERS here.
@Override
public int hashCode() {
//implemented
}
@Override
public boolean equals(Object obj) {
//implemented
}
}