我正在使用Hibernate 4.1.7并尝试更新对象,但没有文档说明应该如何完成。目前,我正在执行以下操作:
Person person = personDao.getPersonById(1);
person.setAge(23);
person.setLastname("McName");
person = personDao.update(person);
在 PersonDao 中更新看起来像:
public Person update(Person person) {
return entityManager.merge(person);
}
在 PersonDao 中,getPersonById 是:
public Person getPersonById(int id) {
personQuery = entityManager.createNamedQuery("Person.findPerson", Person.class);
personQuery.setParameter("id", id);
return personQuery.getSingleResult();
}
我已经在Person类中定义了一个命名查询,代码如下:
@NamedQuery(name="Person.findPerson", query="SELECT p FROM Person p WHERE p.id = :id")
如果我不想更新我的Person对象,我该如何使用Hibernate实现更新操作?
personDao.update()
的调用完全是不必要的:JPA/Hibernate会在事务结束时自动将实体状态持久化。getPersonById方法也可以简化为em.find(Person.class, id)
,这样更简单、更高效,因为如果实体已经被加载,它就不会执行任何查询。 - JB Nizet