编写hibernate查询时出现问题

时间:2009-10-27 10:57:37

标签: java hibernate

Hiya,当谈到休眠时,我会成为一个新手,所以我会尽可能清楚地问我的问题。我想执行以下查询作为hibernate查询。

 <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;
    }

3 个答案:

答案 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更具可扩展性。试一试,看看它是否符合您的需求。

相关问题