Как сделать соединение с помощью Hibernate - PullRequest
1 голос
/ 29 ноября 2010

У меня есть вопрос относительно объединения двух сущностей с использованием hql.

Начиная с пользовательского профиля, мне нужно получить имя роли, связанной с этим пользовательским профилем. Поэтому мне нужно сделать соединение, чтобы получить его в таблице ролей.

У меня есть следующий класс UserProfile:

@Entity
@Table(name="USER_PROFILES")
public class UserProfile extends VersionedObject implements Serializable {

  public static final int CAID_LENGTH = 64;

  @Column(nullable=false, length=CAID_LENGTH)
  private String caid;

  @Column(length=255)
  private String description;

  @CollectionOfElements
  @JoinTable(
      name="USER_ROLES",
      joinColumns={
          @JoinColumn(name="user_id", referencedColumnName="id"),
          @JoinColumn(name="user_v_no", referencedColumnName="v_no")
  })
  @Column(name="role_id")
  private Set<Integer> roleIds;

Вот класс Role.java:

@Entity
@Table(name="ROLES")
public class Role extends VersionedObject implements Serializable {

  @Column(nullable=false, length=255)
  private String name;
  @Column(length=255)
  private String description;

  @CollectionOfElements
  @JoinTable(
      name="ROLES_RIGHTS",
      joinColumns={
          @JoinColumn(name="role_v_no", referencedColumnName="v_no"),
          @JoinColumn(name="role_id", referencedColumnName="id")
  })

  private Set<Right> rights;

Знаете ли вы, как я могу создать соединение на основе private Set<Integer> roleIds в userProfile.java, чтобы получить связанную роль и получить имя?

Большое спасибо:)

1 Ответ

0 голосов
/ 04 декабря 2010

Я бы сказал, что вы представляете свои таблицы, а не представляете объектные отношения реального мира. Под этим я подразумеваю, что вы должны не отображать идентификатор ролей, а фактический класс ролей.

Итак, вместо отображения этого:

private Set<Integer> roleIds;

Попробуйте сопоставить это:

private Set<Role> roles;

Вы правильно сделали для Set<Right> rights, поэтому не уверены, почему вы сопоставили идентификаторы вместо объектов в Set<Integer> roleIds.

После этого вы сможете просто выполнить userProfile.roles, получив полный набор ролей, включая их имена.

...