Sto usando Hibernate 4.1.7 e sto provando ad aggiornare l'oggetto, ma non c'è documentazione su come dovrebbe essere fatto. Attualmente, sto facendo questo:Aggiornamento di ibernazione con EntityManager
Person person = personDao.getPersonById(1);
person.setAge(23);
person.setLastname("McName");
person = personDao.update(person);
Nell'aggiornamento PersonDao assomiglia a:
public Person update(Person person) {
return entityManager.merge(person);
}
In PersonDao getPersonById è:
public Person getPersonById(int id) {
personQuery = entityManager.createNamedQuery("Person.findPerson", Person.class);
personQuery.setParameter("id", id);
return personQuery.getSingleResult();
}
anche io ho definito query denominata dentro classe persona ed è qui:
@NamedQuery(name="Person.findPerson", query="SELECT p FROM Person p WHERE p.id = :id")
Usando che la mia persona non sarà aggiornata, come dovrei implementare l'aggiornamento usando la sospensione?
Il codice di cui sopra è OK, tranne che la chiamata a 'personDao.update()' è completamente inutile se tutto viene eseguito in una singola transazione: lo stato di un'entità viene effettuata automaticamente persistente da JPA/Hibernate a la fine della transazione. Il metodo getPersonById potrebbe anche essere ridotto a 'em.find (Person.class, id)', che sarebbe più semplice e più efficiente, dal momento che non eseguirà alcuna query se l'entità è già stata caricata. –
Addendum: questo è sicuramente spiegato nella documentazione. Vedi http://docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/#d5e772 –