如何使用hibernate进行连接

时间:2010-11-29 09:00:43

标签: hibernate hql criteria detachedcriteria

我有一个关于使用hql的2个实体之间的连接的问题。

从userProfile开始,我必须检索与此userProfile关联的角色的名称。所以我需要进行连接才能将其放入角色表中。

我有以下类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;

您知道如何基于userProfile.java中的private Set<Integer> roleIds建立连接以检索关联角色以便检索名称吗?

非常感谢:)

1 个答案:

答案 0 :(得分:0)

我会说你代表你的桌子,而不是代表现实世界的对象关系。通过这种方式,我的意思是你应该映射角色的ID,而是实际的角色类。

所以,而不是映射这个:

private Set<Integer> roleIds;

尝试映射:

private Set<Role> roles;

您对Set<Right> rights进行了正确的操作,因此,不确定为什么要在Set<Integer> roleIds中映射ID而不是对象。

之后,您应该能够简单地执行userProfile.roles,检索一整套角色,包括其名称。