我正在尝试在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
答案 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
中,您可以获得更新记录的数量。