2014-03-31 63 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方法将返回更新后的键值。