2014-01-10 95 views
0

我有一個小的查詢是這樣的:Hibernate HQL列表屬性?

String sqlStr = "select count(*) from MyTable n where primaryKey.userId = :userId and primaryKey.userType = :userType" 

String[] paramNames = {"userId", "userType" }; 
Object[] paramValues = {userId, userType}; 

List myObjects = (List) hibernateTemplate.findByNamedQueryAndNamedParam("objectsToDeleteForUser", paramNames, paramValues); 

,這工作得很好。我可以使用userid和usertype進行調用,並獲取一個或多個匹配記錄。

我現在想做的事情是有一個userid和usertype的列表並執行調用,但不必迭代列表,但進行一次調用。所以基本上當userid(0)和usertype(0),userid(1)和usertype(1)...................

是否有可能做這在HQL中有一個調用。像IN子句(X)那樣。

感謝

+0

AFAIK工作,這是不是HQL支持。另一個不使用複合主鍵的好理由。使用自動生成的單列主鍵,一切都會更容易。 –

回答

0

somwthing這樣的可能:

hibernateSession = HibernateUtil.getSessionFactory().getCurrentSession(); 
hibernateSession.beginTransaction(); 

List<Object> userId = new ArrayList<Object>(); 
List<Object> userType= new ArrayList<Object>(); 

Query q1 = hibernateSession.createQuery("select count(*) from MyTable n where primaryKey.userId IN (:userId) and primaryKey.userType IN (:userType)"); 

q1.setParameterList("userId", userId); 
q1.setparameterList("userType" , userType); 

List myObjects = q1.list(); 

hibernateSession.close(); 

這也許應該爲你