尝试重复记录被Hibernate删除

时间:2011-06-09 09:29:04

标签: hibernate hibernate-mapping

我有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
    }
}

0 个答案:

没有答案