2012-05-28 48 views
0

我正在使用休眠。我需要在下面創建查詢。 subContest可能爲null,在這種情況下,subContest_id=:cont不應該是where子句的一部分。在創建動態sql時的傳統SQL中;對於這種情況下,我曾經做subContest_id = subContest_id ;但如何在下面的情況下實現它。這裏如果我嘗試query.setParameter("cont", "subContest_id ");它會給出異常,因爲cont應該是一個id而不是一個字符串。在Hibernate中創建動態sql;我如何實現1 = 1

Query query = getEntityManager().createQuery("select * from Upload where moderated=:mod, subContest_id=:cont order by lastModifiedTime desc "); 
    query.setParameter("cont", subContest.getId()); 
+0

你不能使用標準的API來創建動態查詢? – coder

回答

2

你可以嘗試使用條件查詢休眠

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

您可以添加您的where子句爲

Criteria criteria = session.createCriteria(Upload.class) 
    .add(Restrictions.eq("mode", value)); 
你的情況

你想添加限制前檢查零限制

if(subContest_id!=null){ 
     criteria.add(Expression.le("subContest_id",subContest_id)); 
    } 


最後爲了通過可以利用這個

Criteria criteria = session.createCriteria(Upload.class) 
    .addOrder(Order.desc("lastModifiedTime")); 

請參閱here關於如何使用條件的詳細信息進行查詢

+0

我覺得應該有一個更好的方式來做到這一點,而不是如此多的其他..如在動態SQL我們用它來使它1 = 1 – Deepak

+0

@Deepak:*如此多的其他* *?在上面的答案中有一個「if」。您必須以某種方式測試參數是否爲空。 –

0
 Query query = null; 
    if(cont != null){ 
     query = getEntityManager().createQuery("select * from Upload where moderated=:mod, subContest_id=:cont order by lastModifiedTime desc "); 
query.setParameter("cont", subContest.getId()); 
query.setParameter("mod", moderated.getId()); 
    } esle { 
     query = getEntityManager().createQuery("select * from Upload where moderated=:mod order by lastModifiedTime desc "); 
query.setParameter("mod", moderated.getId()); 
    }