SequenceGenerator を利用して、シーケンス ジェネレーターから次の値を取得したいと思います。DB へのアクセスを避け、sequencegenerator に依存して一意の値を取得したいと考えています。また、オブジェクトを永続化せずに、値を使用して表示フィールドに一意の ID を表示しています。
質問する
32702 次
3 に答える
4
次のシーケンス値のみを取得するには、次を使用できます。
Query q = em.createNativeQuery("select nextval('schema.sequence_name')");
return (Long)q.getSingleResult();
于 2013-01-22T14:24:59.367 に答える
2
JPA 値生成戦略を見落とすと、SEQUENCE 戦略があなたの場合に最適です。
AUTO や IDENTITY とは異なり、SEQUENCE 戦略は、新しいエンティティ オブジェクトが永続化されるとすぐに (つまりcommit の前に) 、自動値を生成します。これは、主キーの値が先に必要な場合に役立ちます。データベース サーバーへのラウンド トリップを最小限に抑えるために、ID はグループで割り当てられます。
各割り当ての ID の数は、allocationSize 属性によって指定されます。
前のシーケンスから生成された ID が必要な場合は、オブジェクトを永続化してその ID を取得します。後で永続化コンテキストから削除できます。
固執する前に ID が必要な理由がわかりません。そして、シーケンスジェネレーターから値を取得しても意味がないと思います。生成された値をいじることはお勧めしません。ID に手動の値を使用することもお勧めしません。すぐに使用できる機能を使用します。
于 2012-07-13T10:49:46.443 に答える