我使用Hibernate 4.1.7和尝试更新的对象,但世界上没有文档,它应该怎么做。目前,我这样做:休眠更新的EntityManager
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 /休眠在交易结束。 getPersonById方法也可以简化为'em.find(Person.class,id)',这会更简单,更高效,因为如果实体已经加载,它不会执行任何查询。 –
附录:这在文档中有明确的解释。见http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/#d5e772 –