2010-02-25 12 views
5

Ich habe eine Hibernate-Entität namens Execution. Es wird am Anfang meines Prozesses erstellt und am Ende aktualisiert, um anzuzeigen, wie es fertig ist.Aktualisierung der JPA-Hibernate-Entität ohne Auswahl aus der Datenbank

Ich möchte eine einzelne Eigenschaft dieser Entität aktualisieren, ohne eine Auswahl in meiner Datenbank zu verursachen.

Execution execution = entityManager.getReference(Execution.class, executionId); execution.setStatus(Status.FINISHED); // -> Wenn diese Methode aufgerufen wird, wird ein SELECT in meiner Datenbank ausgelöst. Ich wollte nicht, dass es passiert, ich möchte nur meine Entität aktualisieren.

Dies ist nicht spezifisch für diese Methode, jede andere Methode, die Ergebnisse in einer SELECT-Klausel genannt wird. Tatsächlich scheint die Auswahl bereits vor dem Aufruf meiner Methode zu erfolgen. Mein Eindruck ist, dass Hibernate-Proxies Code in meine Klasse no-args constructor setzen, um jedes Mal, wenn eine Methode aufgerufen wird, eine Auswahl auszulösen.

Ist es möglich, JPA/Hibernate-Entitäten zu aktualisieren, ohne eine SELECT-Anweisung in meiner Datenbank auszulösen?

Antwort

1

So funktioniert Hibernate. Sein Proxy-Objekt lädt das reale Objekt aus der Datenbank, wenn auf eine Nicht-ID-Eigenschaft zugegriffen wird.

Versuchen Sie, das Objekt zu Beginn Ihres Prozesses zu speichern/laden (um das auszuführen SELECT), und stellen Sie sicher, dass die Sitzung nicht automatisch flushed, wenn ein Objekt berührt wird (Ich denke, das Standardverhalten ist keine automatische Flush , aber es ist einen Scheck wert).

Oder Sie können auch versuchen, Ihr Objekt während der Verarbeitung von der Hibernate-Sitzung zu trennen.

+1

Ich werde diese Antwort als die richtige akzeptieren. Ich kam mit JPA-QL Bulk Update/Einfügen http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html/batch.html#batch-direct – user266391

+0

auf eine einfachere Lösung zu dem, was ich möchte @ user266391 Ich kenne JPA nicht, also danke für den Link :-) –

Verwandte Themen