2017-05-10 12 views
1

私は内部的にOracleシーケンスからnext_valを照会しているDAOクラスを持っています。このシーケンスは、任意のエンティティにバインドされていませんが、単に内部ロジックの値を照会、私はネイティブクエリに次のようにgetNextValueFromSequence()方法はDAOで呼び出されるたびに作成していたようHibernate 5:シングルトンパターンでのcreateNativeQuery()

Query nextValQuery = entityManager.createNativeQuery(GET_NEXT_SEQUENCE_VAL_SQL); 

メソッドが呼び出されるたびにクエリを作成しているので、これをリファクタリングして、Spring Beanとして定義されたシングルトンで作成されたネイティブクエリを作成することを考えていたので、初めてクエリが作成されるのはgetNextValueFromSequence()です。

これには何らかの欠点がありますか? Hibernateセッションではこのアプローチに問題はありますか?

答えて

1

私はthet JPA仕様によって提供さという名前のクエリー機能を利用することをお勧めします:

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

注釈が一部のエンティティで定義する必要があります。次のように

はその後、クエリを取得:クエリは、アプリケーションの起動時に一度だけ作成されることに

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

感謝を。

+0

こんにちはMaciej、あなたの答えに感謝します。私はこのオプトインを知っていましたが、残念ながらこのシーケンスにバインドされているエンティティがないため、 '@ NamedNativeQuery'を使用することはできません。 –

+0

これは問題ありません。仕様では、クエリが定義されているエンティティに関連するようにクエリが強制されません。だからあなたはまだ行くことができます –

0

クエリインスタンスはセッションにバインドされているため、同じQueryインスタンスを再利用することはお勧めできません。

関連する問題