Отображение отношений сущностей JPA - PullRequest
1 голос
/ 17 января 2012

Я хотел бы получить несколько советов о том, как лучше расположить мои классы сущностей JPA. Предположим, у меня есть 2 таблицы, которые я хотел бы смоделировать как сущности, пользователя и роль.

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 Ответ

1 голос
/ 17 января 2012

Да, вы бы сбросили отображение private Long roleId, если у вас есть @ManyToOne в том же столбце.

Как следует из ошибки, вы можете отобразить каждый столбец в @Entity только один раз. Поскольку role_id является @JoinColumn для ссылки @ManyToOne, вы не можете также отобразить ее как свойство.

Однако вы можете добавить удобный метод для возврата идентификатора роли, например

 public Long getRoleId() {
   return role.getId();
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...