1

我正在尝试在 Hibernate 中编写 Criteria,我想要的输出是如果列 empfield1 的值不是“REGULARIZE”,则更新,否则不更新记录。

我试过下面一个。

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
4

3 回答 3

1

That means ,With that criteria there are multiple records are there in your Database.

To know how many records are there,

Try

List<EmployeePunch> emps = (ArrayList<EmployeePunch>)criteria.list();

So that emps will give you a list of EmployeePunch's which meets the criteria.

Then iterate the list and see how many items are there inside database.

于 2013-08-30T10:44:52.980 回答
1

我认为你忘记给 id 而不给 id hibernate 将返回多条记录empField1="REGULARIZE"

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

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

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

于 2013-08-30T11:41:44.547 回答
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你得到更新记录的计数。

于 2013-08-30T11:02:24.893 回答