簡體   English   中英

休眠一對多映射,其中一類在多側具有復合主鍵

[英]Hibernate one to many mapping where one class has a composite primary key on many side

我想使用休眠使用內部聯接查詢兩個表。

兩張表如下。

CREATE TABLE systemusersystem_user_id INT(20)NOT NULL AUTO_INCREMENT, user_name VARCHAR(50)NOT NULL system_user_id ',PRIMARY KEY( system_user_id

CREATE TABLE rolesystem_user_id INT(20)NOT NULL, role_id INT(20)NOT NULL system_user_id,role_id ',PRIMARY KEY( system_user_id,role_id ),CONSTRAINT FK_SYSTEM_USER_ID FOREIGN KEY( system_user_id )REFERENCES systemusersystem_user_id

這兩個表具有一對多的關系。

這些拖曳的Bean類如下。

@Entity(name = "role")
@IdClass(RoleCompositeKey.class)

public class Role extends implements java.io.Serializable {

private int roleId =0;
private int systemUserId =0;
private SystemUser systemUser;

public Role(){

}

public void setRoleId(int roleId){
 this.roleId = roleId;
}

@Id
@Column(name = "role_Id")
public int getRoleId(){
    return roleId;
}

public void setSystemUserId(int systemUserId){
    this.systemUserId = systemUserId;
}

@Id
@Column(name="system_user_id")
public int getSystemUserId(){
    return systemUserId;
}


public void setSystemUser(SystemUser systemUser){
    this.systemUser= systemUser;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "system_user_id", nullable = false)
public SystemUser getSystemUser(){
    return systemUser;
}

}


@Entity
@Table(name = "systemuser",uniqueConstraints = {
    @UniqueConstraint(columnNames = "system_user_id"),
    @UniqueConstraint(columnNames = "user_name") })

public class SystemUser {

private int systemUserId = 0;
private String userName            = null;


private Set<Role> roleList;

public SystemUser(){

}

public void setUserName(String userName) {
    this.userName = userName;
}

@Column(name = "user_name")
public String getUserName() {
    return userName;
}


public void setSystemUserId(int systemUserId){
    this.systemUserId = systemUserId;
}

@Id
@Column(name="system_user_id")
public int getSystemUserId(){
    return systemUserId;
}

public void setRole(Set<Role> roleList){
    this.roleList = roleList;
}

@OneToMany(fetch = FetchType.LAZY, mappedBy = "systemUser")
public Set<Role> getRole(){
    return roleList;
}
}

但我說錯了

“ ........構造函數引發異常;嵌套異常為org.hibernate.MappingException:實體中映射的重復列:.... beans.Role列:system_user_id(應使用insert =” false“更新進行映射=“ false”)“

有人可以幫我嗎? 任何幫助深表感謝!

提前致謝!

“實體映射中的重復列”。 您兩次聲明角色,關系。 刪除這個。

    @Id
   @Column(name="system_user_id")
   public int getSystemUserId(){
        return systemUserId;
   }

離開這一個

        @ManyToOne(fetch = FetchType.LAZY)
       @JoinColumn(name = "system_user_id", nullable = false)
       public SystemUser getSystemUser(){
           return systemUser;
       }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM