使用Hibernate saveorupdate()更新somcolumn!=“somevalue”的记录

时间:2013-08-30 10:41:39

标签: java hibernate

我正在尝试在Hibernate中编写Criteria,我想要的输出是,如果列empfield1的值不是'REGULARIZE',那么更新else不要更新记录。

我试过下面的一个。

Session session = factory1.openSession();
    Criteria criteria=session.createCriteria(EmployeePunch.class);
            criteria.add(Restrictions.ne("empField1","REGULARIZE"));
EmployeePunch empPunch = (EmployeePunch)criteria.uniqueResult();
            empPunch.setId(empPuncId);
            empPunch.setSigninTime(inTime);
            empPunch.setSigninDate(dateOfUpdate);
            empPunch.setSignoutTime(outTime);
            empPunch.setPresent(presentStatus);
            empPunch.setLastUpdateBy(empcode);
            empPunch.setLastUpdateDate(time);   
            empPunch.setEmpField1(remark);  
            session.saveOrUpdate(empPunch);
            tx.commit();

但它给了我错误

Exception : query did not return a unique result: 527

3 个答案:

答案 0 :(得分:1)

这意味着,使用criteria Database,您的List<EmployeePunch> emps = (ArrayList<EmployeePunch>)criteria.list(); 会有多条记录。

要知道有多少记录,

尝试

emps

因此EmployeePunch's会为您提供符合条件的{{1}}列表。

然后迭代列表,看看数据库中有多少项。

答案 1 :(得分:1)

我认为你忘了给id而不给id hibernate会返回empField1="REGULARIZE"的多个记录

你应该像下面一样给出id:

Criteria criteria=session.createCriteria(EmployeePunch.class);
         criteria.add(Restrictions.ne("empField1","REGULARIZE"))
         .add(Restrictions.eq("empPuncId",empPuncId));

现在它将返回单个匹配记录,然后更新它。

答案 2 :(得分:0)

为什么不以这种方式使用HQL?

Query query = session.createQuery("update EmployeePunch set signinTime = :signinTime, signinDate = :signinDate where empField1 = 'REGULARIZE').setParameter("signinTime",signinTime).setParameter("signinDate",signinDate);
int updateRecordCount = query.executeUpdate();

当然,您必须为其他属性设置值(如果它是您的@Id字段,则除了Id);在updateRecordCount中,您可以获得更新记录的数量。