【问题标题】:Hibernate one to many mapping where one class has a composite primary key on many side休眠一对多映射,其中一个类在多侧具有复合主键
【发布时间】:2014-08-20 20:19:28
【问题描述】:

我想查询两个使用休眠的内连接连接的表。

两张表如下。

创建表systemuser ( system_user_id INT(20) NOT NULL AUTO_INCREMENT, user_name VARCHAR(50) NOT NULL DEFAULT '0', 主键 (system_user_id)
)

创建表role ( system_user_id INT(20) 非空, role_id INT(20) NOT NULL DEFAULT '0', 主键 (system_user_id,role_id), 约束 FK_SYSTEM_USER_ID 外键 (system_user_id) 参考 systemuser (system_user_id) )

这两个表是一对多的关系。

这些 tow 的 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=" 映射假“更新=“假”)“

请问有人可以帮我吗?非常感谢任何帮助!

提前致谢!

【问题讨论】:

    标签: java spring hibernate


    【解决方案1】:

    “实体映射中的重复列”。你在角色中声明,关系两次。删除这个。

        @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 throw load() exception: java.lang.NoSuchMethodError: org.hibernate.cfg.Environment.verifyProperties(Ljava/util/Map;)V”
    • 没问题。那是另一回事,你需要在这里开另一张票。请投票并标记为正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    相关资源
    最近更新 更多