Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
映射JPA实体关系_Jpa - Fatal编程技术网

映射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

我想要一些关于如何最好地布局我的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() {}
}
建立这种关系模型的正确方法是如上所述,还是我会放弃私人长角色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
修饰符谢谢。当我放下私人长卷时,一切似乎都很顺利。我只是不知道是否应该,因为它在后端数据库表中。但我想这样做是可以接受的。