Hibernate-update mit EntityManager

Ich bin mit Hibernate 4.1.7 und versuchen, ein update-Objekt, aber es gibt keine Dokumentation, wie es getan werden sollte. Derzeit bin ich, dies zu tun:

    Person person = personDao.getPersonById(1);
    person.setAge(23);
    person.setLastname("McName");
    person = personDao.update(person);

PersonDao implementiert update sieht wie folgt aus:

    public Person update(Person person) {
      return entityManager.merge(person);
    }

PersonDao implementiert getPersonById ist:

    public Person getPersonById(int id) {
      personQuery = entityManager.createNamedQuery("Person.findPerson", Person.class);
      personQuery.setParameter("id", id);
      return personQuery.getSingleResult();
    }

Auch ich habe die benannte Abfrage, die innerhalb der Person-Klasse und ist hier:

    @NamedQuery(name="Person.findPerson", query="SELECT p FROM Person p WHERE p.id = :id")

Mithilfe, dass meine Person nicht aktualisiert werden, wie soll ich das implementieren, die das update mit hibernate?

  • Der obige code ist OK, außer dass der Aufruf personDao.update() ist völlig unnötig, wenn alles läuft in einer einzigen Transaktion: der Zustand einer Entität wird automatisch persistent durch JPA/Hibernate am Ende der Transaktion. Die getPersonById Methode könnte auch reduziert werden, um em.find(Person.class, id), das wäre einfacher und effizienter, da wäre es nicht auszuführen, die zu einer Abfrage, ob die Entität bereits geladen.
  • Nachtrag: das ist definitiv in der Dokumentation erläutert. Siehe docs.jboss.org/hibernate/orm/4.1/devguide/en-US/html_single/...
InformationsquelleAutor Timo | 2012-10-27
Schreibe einen Kommentar