2017-05-10 1 views
1

Ich habe eine DAO-Klasse, die intern das next_val von einer Oracle-Sequenz abfragt.Hibernate 5: createNativeQuery() im Singleton-Muster

Da diese Sequenz nicht an Einheiten gebunden ist, sondern einfach den Wert für die interne Logik der Abfrage, ich bin jedes Mal der getNextValueFromSequence() Methode der nativen Abfrage erstellen auf der DAO aufgerufen wird, wie folgt:

Query nextValQuery = entityManager.createNativeQuery(GET_NEXT_SEQUENCE_VAL_SQL); 

Da ich die Abfrage jedes Mal neu erstelle, wenn die Methode aufgerufen wird, habe ich daran gedacht, die native Abfrage in einem Singleton zu definieren, der als Spring-Bean definiert ist, so dass die Abfrage erst beim ersten Aufruf von getNextValueFromSequence() erstellt wird.

Gibt es einen Nachteil dabei? Würde die Hibernate-Sitzung Probleme mit diesem Ansatz verursachen?

Antwort

1

Ich würde empfehlen, Vorteil benannte Abfrage-Funktion von thet JPA-Spezifikation zur Verfügung gestellt unter:

@Entity 
@NamedNativeQuery(name = "sequenceQuery", query = "<query>", resultClass = Integer.class) 

Die Anmerkung hat auf einige Unternehmen definiert werden.

Dann erhalten Sie die Abfrage wie folgt:

Query nextValQuery = entityManager.createNamedQuery("sequenceQuery"); 

Dank, dass die Abfrage nur einmal von der Anwendung während der Inbetriebnahme erstellt werden.

+0

Hallo Maciej, danke für deine Antwort. Ich kannte dieses Optoin, aber leider kann ich '@ NamedNativeQuery' nicht verwenden, da ich keine Entitäten an diese Sequenz gebunden habe. –

+0

Das ist kein Problem. Die Spezifikation erzwingt keine Abfrage für die Entität, in der sie definiert ist. So können Sie immer noch gehen –

0

Abfrage-Instanz ist an die Sitzung gebunden, daher ist es nicht sinnvoll, dieselbe Query-Instanz erneut zu verwenden.

Verwandte Themen