<sql-query name="updateINFO">
update
info
set
status_id = 2
where
pid = :i
</sql-query>
现在我是一个动态值,所以有时我会传递1有时1000,实际上我将通过列表迭代并对列表中的每个项目进行查询,你明白我的观点。现在这是我调用此查询执行的java部分..
for(int i=0; i<list.size(); i++)
{
Query query = session.getNamedQuery("updateINFO").setParameter("pid", list.get(i));
}
这种方法有问题吗?谢谢
我已经创建了Long类型的列表,我从另一个查询中获取列表项
List<Long> list = null;
Query query = session.getNamedQuery("endDateChecker");
list = query.list();
这是我的方法:
public List<Long> I need findItemByPIdEndDate() throws Exception {
List<Long> list = null;
try{
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery("endDateChecker");
list = query.list();
for (Long listItem : list) {
Query query1 = session.getNamedQuery("updateINFO")
.setParameter("in",listItem);
}
}catch (HibernateException e){
throw new DataAccessException(e.getMessage());
}
return list;
}
答案 0 :(得分:2)
您可以使用setParameterList:
<sql-query name="updateINFO">
update info set status_id = 2 where pid in (:parameters)
</sql-query>
public List <Long> findItemByPIdEndDate() throws Exception {
List<Long> list = null;
try{
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery("endDateChecker");
list = query.list();
Query query1 = session.getNamedQuery("updateINFO")
.setParameterList("parameters",list);
query1.executeUpdate();
}catch (HibernateException e){
throw new DataAccessException(e.getMessage());
}
return list;
}
List<Long> list = null;
try{
Session session = sessionFactory.getCurrentSession();
Query query = session.getNamedQuery("endDateChecker");
list = query.list();
Query query1 = session.getNamedQuery("updateINFO")
.setParameterList("parameters",list);
query1.executeUpdate();
}catch (HibernateException e){
throw new DataAccessException(e.getMessage());
}
return list;
}
答案 1 :(得分:1)
从原来的问题:
for(int i=0; i<list.size(); i++)
{
Query query = session.getNamedQuery("updateINFO").setParameter("pid", list.get(i));
}
我认为您忘记了对query.executeUpdate()
方法的调用...
答案 2 :(得分:0)
如果您在使用NHibernate查询语言时遇到问题,他们会提供一种称为Criteria Querying的替代方法。 API允许您更动态地构建查询字符串,并且比HQL更具可扩展性。试一试,看看它是否符合您的需求。