Hibernate Update Query问题

时间:2013-02-06 07:12:41

标签: java hibernate orm sql-update dao

对于此更新查询

update TestDB.dbo.MyEmp set empname=? where empid=?

我在DAO课程中写道

MyEmployee myEmployee = new MyEmployee();

MyEmployee myEmployee =(MyEmployee )session.load(MyEmployee.class, 
  new Integer(1700));
myEmployee.setName("updatedName"); 
session.update(myEmployee );

它的工作正常,但我需要知道下面提到的这种类型的更新查询

update TestDB.dbo.MyEmp set empsalary=? where empid=? && empname = ?

(即,我需要在where子句中使用两个条件来更新表,这可以通过HQL完成,但我想知道如何通过使用saveOrUpdate方法来实现它。)

如何使用update或saveOrUpdate方法()进行更新? 是否有可能在hibernate中做到这一点?

2 个答案:

答案 0 :(得分:4)

您必须先以两种方式获取对象:

1- HQL

Query query = session.createQuery("from MyEmployee e where e.id = ? and e.name = ?");
query.setParameter(0, 1);
query.setParameter(1, "myName");
MyEmployee e = (MyEmployee) query.uniqueResult();
e.setSalary(5000);
session.saveOrUpdate(e);

2-标准

Criteria criteria = session.createCriteria(MyEmployee.class);
criteria.add(Restrictionss.eq("id", 1)).add(Restrictions.eq("name", "myName");
MyEmployee e = (MyEmployee) criteria.uniqueResult();
e.setSalary(5000);
session.saveOrUpdate(e);

顺便提一下,在默认刷新模式下,当你获取对象并更新它时,它会在会话结束时自动保留(如果你没有使用StatelessSession)。

答案 1 :(得分:0)

Hibernate saveorupdate将使用表实体,我的意思是Pojo类作为参数.Hibernate将通过其主键即id来识别表中的实体。

所以你不需要在其余的参数上添加任何其他where子句。因为你已经决定保存实体而不管其中的数据。

如果你真的想检查另一个参数,你必须在Saveorupdate之前在java中检查相同的内容。

如果您决定保存整个对象数据,然后仅使用saveOrUpdate其他方式请转到HQLCriterias以获取更多Restrictions