我想就如何最好地布局我的JPA实体类提出一些建议。假设我有两个表,我想建模为实体,用户和角色。
Create Table users(user_id primary key,
role_id integer not null )
Create table role(role_id primary key,
description text,
)
我创建了以下两个JPA实体:
@Entity
@Table(name="users")
@Access(AccessType.PROPERTY)
public class User implements Serializable {
private Long userId;
private Long roleId;
private Role role;
@Column(name = "user_id")
@Id
public Long getUserId() {}
@Column(name = "role_id")
public Long getRoleId() {}
@ManyToOne()
JoinColumn(name="role_id")
public Role getRole() {}
}
角色实体:
@Entity
@Table(name="Role")
@Access(AccessType.PROPERTY)
public class Role implements Serializable {
private String description;
private Long roleId;
@Column(name = "role_id")
@Id
public Long getRoleId() {}
@Column(name = "description")
public Long getDescrition(){}
@ManyToOne()
@JoinColumn(name="role_id")
public Role getRole() {}
}
建模这种关系的正确方法是否如上所述,或者我是否会删除私有的Long roleId;用户?欢迎任何建议。 当我以这种方式映射时,我收到以下错误:
org.hibernate.MappingException: Repeated column in mapping for entity:
答案 0 :(得分:1)
是的,如果您在同一列上有private Long roleId
,则会删除@ManyToOne
映射。
如错误所示,您只能映射一次@Entity中的每一列。由于role_id
是@JoinColumn
引用的@ManyToOne
,因此您无法将其映射为属性。
但是,您可以添加便捷方法来返回角色ID,例如
public Long getRoleId() {
return role.getId();
}