2016-06-15 59 views
2

我想使用Hibernate Criteria語言編寫此查詢。我對Hibernate相當陌生,不能將這個查詢轉換爲Criteria表單。我提到了許多可用的答案,但在我的情況下,我在不同的列上使用內部連接而不是主鍵/外鍵列。我提到this,但仍然不能正確。在非主鍵列上使用Hibernate標準的內部連接

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的例子,處理父子關係,而無需一個外鍵關係:這裏提供

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例子,因爲Hibernate的標準API,而傾向於使用JPA的棄用標準API(見Legacy Hibernate Criteria Queries)。

+0

感謝您的回答。我在這裏是一個新手。我無法從對象中獲取getDb()。我找不到它。 – SiMemon

+0

這是「無論持有你的數據庫相關的東西」的僞代碼。用您用來獲取實體經理的任何方式替代。 – Rob