スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JPAで、シーケンスで採番された値をとる方法

 JDBCだと Statement.RETURN_GENERATED_KEYS を指定すればとれるけど、JPA(Java Persistence API)だとどうやって取るんだろうと思ったが、特に何も考えなくてもEntityクラスから取れた。
 EntityManagerでflushされたタイミングでEntityクラスに採番された値が入っているもよう。

■ソース(抜粋)
・main

public static void main(String[] args) throws Exception {
EntityManagerFactory emf = null;
try {
emf = Persistence.createEntityManagerFactory("JavaApplication1PU");

TestSeqJpaController tsj = new TestSeqJpaController(emf);
TestSeq ts = new TestSeq();
ts.setData1("test");
System.out.println("★before = " + ts.getKey1());
tsj.create(ts);
System.out.println("★after = " + ts.getKey1());

} finally {
if(null != emf)
emf.close();
}
}


・TestSeqJpaController

public EntityManager getEntityManager() {
return emf.createEntityManager();
}
public void create(TestSeq testSeq) {
EntityManager em = null;
try {
em = getEntityManager();
em.getTransaction().begin();
em.persist(testSeq);
em.getTransaction().commit();
} finally {
if (em != null) {
em.close();
}
}
}


■SQL
create table TEST_SEQ (
KEY1 integer generated always as identity (start with 1, increment by 1),
DATA1 varchar(10),
constraint PK_TEST primary key (KEY1)
);


■実行結果
・実行
run:
★before = null
[EL Info]: 2014-11-10 22:12:11.907--ServerSession(60241307)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Info]: connection: 2014-11-10 22:12:12.316--ServerSession(60241307)--file:/C:/Users/a/Documents/NetBeansProjects/JavaApplication1/build/classes/_JavaApplication1PU login successful
★after = 1
[EL Info]: connection: 2014-11-10 22:12:12.452--ServerSession(60241307)--file:/C:/Users/a/Documents/NetBeansProjects/JavaApplication1/build/classes/_JavaApplication1PU logout successful
ビルド成功(合計時間: 1秒)

・再実行
run:
★before = null
[EL Info]: 2014-11-10 22:19:41.376--ServerSession(434944762)--EclipseLink, version: Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd
[EL Info]: connection: 2014-11-10 22:19:41.577--ServerSession(434944762)--file:/C:/Users/a/Documents/NetBeansProjects/JavaApplication1/build/classes/_JavaApplication1PU login successful
★after = 2
[EL Info]: connection: 2014-11-10 22:19:41.646--ServerSession(434944762)--file:/C:/Users/a/Documents/NetBeansProjects/JavaApplication1/build/classes/_JavaApplication1PU logout successful
ビルド成功(合計時間: 1秒)


以上。
スポンサーサイト

コメントの投稿

管理者にだけ表示を許可する

検索フォーム
プロフィール

takuan93

Author:takuan93
本ブログの説明書→「ReadMe」

管理者に連絡

カテゴリ
WiX (5)
Ant (1)
フリーエリア
最新記事
カウンター
カレンダー
06 | 2018/07 | 08
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。