2016年10月14日

[JAVA] 用JPA新增資料庫紀錄後,立刻取得ID

我的環境是MySQL,所以還是基於此資料庫觀念上。
新增資料庫紀錄時,有時會需要該筆紀錄的ID


當你的Table ID是auto increment,
如果是使用傳統的方式(ex: JDBC + MySQL語法),
執行完insert後,要如何取得該紀錄 ID?
1. 看最大的ID:如果這個table有其他process使用,肯定會出事
2. 依照剛剛insert的資料找出ID
    2.1 用大量的where, and來找:可以,最後的辦法
    2.2 再訂一個 key:不錯,會比上一個簡潔很多
    2.3 用其他機制控制(ex : 前端在insert前先確認名稱有無重複):類似上一點,但把事情丟給別人

如果是使用EntityManager(JPA)來處理的話:

em.getTransaction().begin();
em.persist(record);
em.flush();
logger.info(newTask.getId());
em.getTransaction().commit();

使用flush( )之後就馬上拿到ID了,
雖然沒研究Entity底層是怎麼做到的,但至少看起來就是同一個物件

沒有留言:

張貼留言