我使用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 –