映射JPA实体关系
我想要一些关于如何最好地布局我的JPA实体类的建议。假设我有两个表,我想建模为实体、用户和角色映射JPA实体关系,jpa,Jpa,我想要一些关于如何最好地布局我的JPA实体类的建议。假设我有两个表,我想建模为实体、用户和角色 Create Table users(user_id primary key, role_id integer not null ) Create table role(role_id primary key, description text, ) 我创建了以下两个JPA实体: @Enti
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() {}
}
建立这种关系模型的正确方法是如上所述,还是我会放弃私人长角色ID;在用户中?欢迎任何建议。
以这种方式映射时,我收到以下错误:
org.hibernate.MappingException: Repeated column in mapping for entity:
是的,如果在同一列上有
@ManyToOne
,则可以删除专用长角色ID
映射
正如错误所暗示的,您只能映射@Entity中的每一列一次。由于role\u id
是@ManyToOne
引用的@JoinColumn
,因此也不能将其映射为属性
但是,您可以添加一个方便的方法来返回角色ID,如
public Long getRoleId() {
return role.getId();
}
是的,如果在同一列上有
@ManyToOne
,则可以删除专用长角色ID
映射
正如错误所暗示的,您只能映射@Entity中的每一列一次。由于role\u id
是@ManyToOne
引用的@JoinColumn
,因此也不能将其映射为属性
但是,您可以添加一个方便的方法来返回角色ID,如
public Long getRoleId() {
return role.getId();
}
是否确实要将用户限制为只有一个(或没有)角色。在此应用中,是的,他们应该只有一个角色。是否确实要将用户限制为只有一个(或没有)
角色
?@role。在这个应用程序中,是的,他们应该只有一个角色。另外-不是问题的一部分,但是你可能不需要默认的@Access
修改器谢谢。当我放下私人长卷时,一切似乎都很顺利。我只是不知道是否应该,因为它在后端数据库表中。但是我想这样做是可以接受的。另外-不是问题的一部分,但是你可能不需要默认的@Access
修饰符谢谢。当我放下私人长卷时,一切似乎都很顺利。我只是不知道是否应该,因为它在后端数据库表中。但我想这样做是可以接受的。