2014-03-31 100 views
2

這看起來應該很簡單,但我一直無法找到答案......我在EE7環境中使用帶有Derby的ElipseLink,並且有一系列帶有外部或複合密鑰關係。找出自動生成的主鍵

如果有自動生成A的主鍵的表A,B和C。 B將它用作外鍵,將C用作組合主鍵的一部分。

如何確定自動生成的值,它是A中唯一保證的唯一值?

我的假設是它應該在實體管理器方法中以某種方式可用,或者在em.persist(實體)完成後直接從屬性中獲得。我已確認該記錄已創建,但在保留後使用getter方法時,該屬性保持爲空。

由於提前, 約翰

+2

在最底層,它是Statement.getGeneratedKeys:http://docs.oracle.com/javase/7/docs/api/java/sql/Statement.html#getGeneratedKeys()但是,我認爲你的問題是真的關於JPA和EclipseLink,我不知道那裏的答案。 –

+1

@Bryan您的反饋提供了一個麪包屑幫助我改進搜索。我發現持久層僅在物理寫入數據庫後才填充主鍵屬性。這是用em.flush()完成的,現在它工作得很好。感謝您花時間幫助! – GolfAddict

回答

1

隨着一代型IDENTITY建議的persistence.xml設置爲創建或刪除,並創建使的EclipseLink可以創建一個表來跟蹤的下一個關鍵。

自動生成的密鑰的更新不會在實體屬性中發生,直到物理寫入數據庫。通過使用em.flush(),可以強制這樣做,並且getter方法將返回更新後的鍵值。