Java 休眠一对多映射,其中一个类在多个方面具有复合主键

Java 休眠一对多映射,其中一个类在多个方面具有复合主键,java,spring,hibernate,Java,Spring,Hibernate,我想使用hibernate查询由内部联接连接的两个表 以下是两个表格 创建表systemuser 系统用户id INT20非空自动增量, 用户名VARCHAR50不为空默认值“0”, 主键系统用户id 创建表角色 系统用户id INT20不为空, 角色id INT20不为空默认值“0”, 主键系统用户id、角色id、, 约束FK_系统用户ID外键系统用户ID引用系统用户系统用户ID 这两个表具有一对多关系 这两个组件的Bean类如下所示 @Entity(name = "role") @IdC

我想使用hibernate查询由内部联接连接的两个表

以下是两个表格

创建表systemuser 系统用户id INT20非空自动增量, 用户名VARCHAR50不为空默认值“0”, 主键系统用户id

创建表角色 系统用户id INT20不为空, 角色id INT20不为空默认值“0”, 主键系统用户id、角色id、, 约束FK_系统用户ID外键系统用户ID引用系统用户系统用户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:实体映射中的重复列:…..bean.Role列:系统用户id应映射为insert=false update=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;
       }

谢谢你,保罗。这将解决上述异常。但是,当我尝试启动服务器时,JBOSS会给出另一个错误。错误是Servlet Init抛出的加载异常:java.lang.NoSuchMethodError:org.hibernate.cfg.Environment.verifyPropertiesLjava/util/Map;VNo问题。这个错误是另一回事,你需要在这里开另一张票。请对回答进行投票并标记为正确。