2014-01-10 47 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(); 

这也许应该为你