1

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;

private Set<Integer> roleIds名前を取得するために関連付けられたロールを取得するために、userProfile.java 内に基づいて結合を作成する方法を知っていますか?

どうもありがとうございました :)

4

1 に答える 1

0

現実世界のオブジェクトの関係を表すのではなく、テーブルを表していると思います。つまり、ロールの ID をマップするのではなく、実際のロール クラスをマップする必要があるということです

したがって、これをマッピングする代わりに:

private Set<Integer> roleIds;

これをマッピングしてみてください:

private Set<Role> roles;

に対しては正しく行ったSet<Right> rightsので、 でオブジェクトではなく ID をマップした理由がわかりませんSet<Integer> roleIds

userProfile.rolesその後、名前を含む役割の完全なセットを取得するだけで簡単に実行できるはずです。

于 2010-12-04T10:42:49.793 に答える