2016-06-15 4 views
2

Hibernate Criteria言語を使用してこの問合せを作成したいとします。私はHibernateにはかなり新しく、このクエリをCriteriaフォームに変換できません。私はそう答えていますが、私の場合は主キー/外部キー列ではなく、異なる列で内部結合を使用しています。私はthisを参照しましたが、それでも正しいことはできません。非一次キー列でHibernate Criteriaを使用する内部結合

select TableA.columnA1, TableA.columnA2, TableA.columnA3, TableB.columnB1, TableC.columnC2 from TableA inner join TableB 
on 
cast(TableA.columnA3 as Integer) = TableB.columnB2 
inner join 
TableC 
on 
TableB.columnB3 = TableC.columnC1 
+0

これまでのコードを表示してください。 [mcve] sについて読む。 – philipxy

答えて

2

参加ロジックを処理するには、テーブルごとにfromを使用するために行くとwhere述語でオン句からあなたの条件のすべてが含まれています。ここで

は、外部キー関係を持つことなく、親子関係を扱うJPAの例です:Hibernateの基準APIはJPAの賛成で廃止されましたので

EntityManager em = getDb().getEntityManager(); 
CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Child> criteria = cb.createQuery(Child.class); 
Root<Parent> p = criteria.from(Parent.class); 
Root<Child> c = criteria.from(Child.class); 
Predicate condition = cb.and(
    cb.equal(c.get(Child_.parentId), p.get(Parent_.id)), 
    ... 
    ); 
criteria.where(condition); 
criteria.select(c); 
criteria.orderBy(cb.asc(c.get(Child_.createDate))); 
TypedQuery<Child> q = em.createQuery(criteria).setMaxResults(limit); 

JPAの例は、ここに提供されますcriteria API(Legacy Hibernate Criteria Queriesを参照)。

+0

あなたの答えをありがとう。私はここで初心者です。オブジェクトからgetDb()を取得できません。私はそれを見つけることができません。 – SiMemon

+0

これは "あなたのDB関連のものを保持しているもの"の擬似コードです。エンティティマネージャを取得するために使用している方法を置換します。 – Rob

関連する問題