映射JPA实体关系

时间:2012-01-17 01:42:19

标签: jpa

我想就如何最好地布局我的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:

1 个答案:

答案 0 :(得分:1)

是的,如果您在同一列上有private Long roleId,则会删除@ManyToOne映射。

如错误所示,您只能映射一次@Entity中的每一列。由于role_id@JoinColumn引用的@ManyToOne,因此您无法将其映射为属性。

但是,您可以添加便捷方法来返回角色ID,例如

 public Long getRoleId() {
   return role.getId();
 }