0

オラクルで定義されている次のシーケンスがあります。

CREATE SEQUENCE MySequence
MINVALUE 65536 
MAXVALUE 4294967296 
START WITH 65536
INCREMENT BY 1
CYCLE
NOCACHE
ORDER;

Hibernate(リクエストするたびに次の値)を介してこれにアクセスするにはどうすればよいですか?(JDBC経由でgetGEnerateKeysを使用しました)

永続化する必要がある別のエンティティで使用する前に、IDが必要です。

ありがとう

4

3 に答える 3

1

これを行うためのJPA標準の方法はありませんが、本当に必要な場合は、基盤となるJDBC接続に確実にアクセスできます。ただし、エンティティが永続化されると、エンティティのIDが自動的に入力される必要があることに注意してください。

于 2012-08-21T08:35:52.127 に答える
1

シーケンスが主キーである限り、たとえば

@Id
@GeneratedValue(strategy = GenerationType.AUTO) 
private int id;

次に、実行すると:

 Integer id = (Integer)session.save(obj);  

IDを返します。

Javadocを参照してください:http ://docs.jboss.org/hibernate/orm/3.5/api/org/hibernate/Session.html#save(java.lang.Object )

于 2012-08-21T08:34:37.797 に答える
1

Oracleの場合、GenerationType.SEQUENCEを使用する必要があります

  @Id
    @GeneratedValue(generator="MySequence", strategy=GenerationType.SEQUENCE)
    @SequenceGenerator(allocationSize=1, name="MySequence", sequenceName="MySequence")

編集:シーケンス名が更新されました

編集:コメントを参照してください:要件は、シーケンスを使用した複合/埋め込みID(主キーとして複数の列を使用)のように聞こえます。しかし残念ながら、どちらのソリューションもシーケンスジェネレーターをサポートしていません。これまでのところ、私は言うことができます。

* hibernateを使用してネイティブクエリを作成し、'を使用してインデックス番号に追加できますselect mySequence.nextval from dual

*または、サブクエリを介してシーケンスとインデックスを表示する新しい列を使用して、そのOracleビューを作成できます。

*これは非常に実験的なもので、試していませんが、@formulaアノテーションを使用できます。ここの例。

于 2012-08-21T08:37:17.430 に答える