Ich benutze Hibernate 4.1.7 und versuche, Objekt zu aktualisieren, aber es gibt keine Dokumentation, wie es gemacht werden sollte. Derzeit ich dies tue:Hibernate Update mit EntityManager
Person person = personDao.getPersonById(1);
person.setAge(23);
person.setLastname("McName");
person = personDao.update(person);
In PersonDao Update wie folgt aussieht:
public Person update(Person person) {
return entityManager.merge(person);
}
In PersonDao getPersonById ist:
public Person getPersonById(int id) {
personQuery = entityManager.createNamedQuery("Person.findPerson", Person.class);
personQuery.setParameter("id", id);
return personQuery.getSingleResult();
}
Auch habe ich definiert benannte Abfrage innerhalb Person-Klasse und ist hier:
@NamedQuery(name="Person.findPerson", query="SELECT p FROM Person p WHERE p.id = :id")
Durch die Verwendung meiner Person wird nicht aktualisiert, wie sollte ich Update mit Hibernate implementieren?
Der obige Code ist in Ordnung, außer dass der Aufruf von 'personDao.update()' völlig unnötig ist, wenn alles in einer einzigen Transaktion ausgeführt wird: der Zustand eines Unternehmens wird automatisch persistent von JPA/Hibernate bei das Ende der Transaktion. Die getPersonById-Methode könnte auch auf em.find (Person.class, id) reduziert werden, was einfacher und effizienter wäre, da sie keine Abfrage ausführen würde, wenn die Entität bereits geladen ist. –
Nachtrag: Dies wird in der Dokumentation eindeutig erklärt. Siehe http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/#d5e772 –