简体   繁体   English

休眠一对多映射,其中一类在多侧具有复合主键

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

I want to query two tables joined by inner join using hibernate. 我想使用休眠使用内部联接查询两个表。

Two tables are as follows. 两张表如下。

CREATE TABLE systemuser ( system_user_id INT(20) NOT NULL AUTO_INCREMENT, user_name VARCHAR(50) NOT NULL DEFAULT '0', PRIMARY KEY ( system_user_id ) 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 role ( system_user_id INT(20) NOT NULL , role_id INT(20) NOT NULL DEFAULT '0', PRIMARY KEY ( system_user_id,role_id ), CONSTRAINT FK_SYSTEM_USER_ID FOREIGN KEY ( system_user_id ) REFERENCES systemuser ( 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

These two tables have a one to many relationship. 这两个表具有一对多的关系。

Bean classes for these tow are as follows. 这些拖曳的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;
}
}

but I'm getting an error saying 但我说错了

"........Constructor threw exception; nested exception is org.hibernate.MappingException: Repeated column in mapping for entity: ....beans.Role column: system_user_id (should be mapped with insert="false" update="false")" “ ........构造函数引发异常;嵌套异常为org.hibernate.MappingException:实体中映射的重复列:.... beans.Role列:system_user_id(应使用insert =” false“更新进行映射=“ false”)“

Please can anyone help me? 有人可以帮我吗? Any help is highly appreciated! 任何帮助深表感谢!

Thanks in advance! 提前致谢!

"Repeated column in mapping for entity". “实体映射中的重复列”。 You declare in role, the relationship two times. 您两次声明角色,关系。 Remove this one. 删除这个。

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

And just leave this one 离开这一个

        @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