1

テーブルの関係は次のとおりです。

  • ID、ユーザー名、年齢の列を持つ users テーブル
  • 列 ID、タイプ、番地を含む住所テーブル
  • 列 ID、ユーザー ID、およびアドレス ID を含む user_address_associations テーブル。userid には users.identity との外部キー関係があり、addressid には addresses.identity との外部キー関係があります。

アドレス タイプが 1 に設定された 18 歳以上のすべてのユーザーを選択したいと思います。ユーザー エンティティとアドレス エンティティの Hibernate マッピングは存在しますが、ユーザーからアドレスへのマッピング内に関連付けが定義されていません。ユーザーとアドレスの間の唯一のリンクは、user_address_associations テーブルを介して指定されます。また、User クラスは Addresses プロパティを定義していません。

生の SQL は次のようになります。

select * from users 
inner join user_address_associations   
on user_address_associations.userid=users.identity
inner join addresses 
on user_address_associations.addressid=addresses.identity and addresses.type=1
where db.users.age >= 18

Hibernate 3.6.5 Criteria API を使用して、次のことから始めました。

Criteria criteria = session.createCriteria(User.class);

// how to do the join to addresses table through user_address_associations table?

// where clause
criteria.add(Restrictions.gt("Age", 1176));

質問は、結合をどのように定式化するのですか?

4

1 に答える 1

2

それは不可能だ。Hibernate クエリ (HQL または Criteria) は、エンティティ、その永続フィールド、および関連付けのみを使用します。結合テーブルがマップされておらず、User エンティティと Address エンティティ間の関連付けを定義するために使用されていない場合、もちろん SQL クエリを除いて、Hibernate でこのテーブルを使用してクエリを定義することはできません。

于 2013-01-02T18:56:24.763 に答える