【发布时间】:2012-10-17 15:44:07
【问题描述】:
我正在使用 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),这样会更简单、更高效,因为如果实体已经加载,它就不会执行任何查询。 -
附录:这在文档中有明确的解释。见docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/…
标签: java hibernate named-query hibernate-entitymanager