【问题标题】:How to make a join using hibernate如何使用休眠进行连接
【发布时间】:2023-04-05 04:42:01
【问题描述】:

我有一个关于使用 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&lt;Integer&gt; roleIds 进行连接以检索关联的角色以检索名称吗?

非常感谢:)

【问题讨论】:

    标签: hibernate hql criteria detachedcriteria


    【解决方案1】:

    我会说你是在代表你的表格,而不是代表现实世界的对象关系。我的意思是,您应该映射角色的 ID,而是映射实际的角色类。

    所以,不要映射这个:

    private Set<Integer> roleIds;
    

    尝试映射这个:

    private Set<Role> roles;
    

    您对Set&lt;Right&gt; rights 的处理是正确的,所以,不知道为什么您映射了Set&lt;Integer&gt; roleIds 中的ID 而不是对象。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2016-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多