如何使用 hibernate 进行连接

发布于 2024-10-04 21:59:21 字数 1364 浏览 6 评论 0原文

我有一个关于使用 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进行连接吗? userProfile.java 中的 roleIds 来检索关联的角色以检索名称?

非常感谢 :)

I have a question regarding join between 2 entities using hql.

Starting on a userProfile, I have to retrieve the name of the role associated to this userProfile. So I need to make a join in order to get it in the role table.

I have the following class 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;

Here is the Role.java class:

@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;

Do you know how can I make a join based on the private Set<Integer> roleIds within the userProfile.java to retrieve the associated role in order to retrieve the name?

Thank you very much :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夢归不見 2024-10-11 21:59:21

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

因此,不要映射此:

private Set<Integer> roleIds;

尝试映射此:

private Set<Role> roles;

您对 Set的操作正确;权限,因此,不确定为什么您映射 ID 而不是 Set中的对象角色 ID

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

I'd say that you are representing your tables, instead of representing real world object relationships. By that, I mean that you should not map the ID of Roles, but the actual Role class.

So, instead of mapping this:

private Set<Integer> roleIds;

Try to map this:

private Set<Role> roles;

You did correctly for the Set<Right> rights, so, not sure why you mapped the IDs instead of objects in Set<Integer> roleIds.

After that, you should be able to simply do userProfile.roles, retrieving a full set of Roles, including its names.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文