2016-08-24 36 views
-1

好日子,我的問題將由兩部分組成。所以,我有3個表:Hibernate 5.2條件查詢(Join),選擇具體的列

一個ABCCD

我不知道我可以使用Hibernate CriteriaQuery中執行以下查詢:

SELECT DISTINCT a 
FROM a 
LEFT JOIN abc ON a.Id = abc.a_Id 
LEFT JOIN cd ON cd.c_Id = abc.c_Id 
WHERE a.name = "foo" or cd.name = "bar" 

而這一次(查詢是相同的,但在這種情況下,我想只有一列而不是全行結果):

SELECT DISTINCT a.Id 
FROM a 
LEFT JOIN abc ON a.Id = abc.a_Id 
LEFT JOIN cd ON cd.c_Id = abc.c_Id 
WHERE a.name = "foo" or cd.name = "bar" 
+0

嘗試使用https://docs.jboss.org/hibernate/orm/5.2/userguide/html_single/Hibernate_User_Guide.html#criteria, – nayakam

回答

0

這裏一個簡單的方法:

public List<MyObject> listeOfMyObject() { 
    EntityManager em; 
    try { 
     em = getEntityManager(); 
     Query query = em.createQuery("SELECT DISTINCT a FROM MyObject a LEFT JOIN abc ON a.Id = abc.a_Id LEFT JOIN cd ON cd.c_Id = abc.c_Id WHERE a.name = 'foo' or cd.name = 'bar'"); 
     return query.getResultList(); 
    } catch (Exception e) { 
     return null; 
    } 
} 

如果您使用的參數應用使用:

public List<MyObject> listeOfMyObject() { 
    EntityManager em; 
    try { 
     em = getEntityManager(); 
     Query query = em.createQuery("SELECT DISTINCT a FROM MyObject a LEFT JOIN abc ON a.Id = abc.a_Id LEFT JOIN cd ON cd.c_Id = abc.c_Id WHERE a.name = :a_name or cd.name = :cd_name"); 
     //set your parametres like that 
     query.setParameter("c_name", "foo"); 
     query.setParameter("cd_name", "bar"); 
     return query.getResultList(); 
    } catch (Exception e) { 
     return null; 
    } 
} 

如果你想獲得結果只有一個:

public MyObject myObject() { 
    EntityManager em; 
    try { 
     em = getEntityManager(); 
     Query query = em.createQuery("SELECT DISTINCT a FROM MyObject a LEFT JOIN abc ON a.Id = abc.a_Id LEFT JOIN cd ON cd.c_Id = abc.c_Id WHERE a.name = :a_name or cd.name = :cd_name"); 
     //set your parametres like that 
     query.setParameter("c_name", "foo"); 
     query.setParameter("cd_name", "bar"); 
     return (MyObject) query.getSingleResult(); 
    } catch (Exception e) { 
     return null; 
    } 
} 

希望這可以幫到你。

+0

所以我正確理解這一點 - 沒有辦法消除原生SQL查詢字符串java代碼? – sereGkaluv

+0

你是什麼意思,我真的不明白 –

+0

我問是否唯一的方法來做到這一點。 - 我不想有這樣的東西:em.createQuery(「SELECT DISTINCT FROM MyObject a」....)我寧願調用某種連接的hibernate方法。 – sereGkaluv