如何使用JPA获取最后一个持久化实体的Id
我正在寻找一种智能且易于阅读的方式来获取使用JPA
的持久化实体的id。 id是一个Integer
。
人们可以想到以下解决方案:
- 不使用
GeneratedValue
策略。 这需要在持久化之前寻找一个免费的id,然后将它放入要保留的实体中:繁琐,但有效。 - 使用
GeneratedValue
策略。 持久性提供程序将负责id生成。 这看起来更聪明,但如何获得身份证?
请参阅下面的解决方案2
MyEntity en = new MyEntity(); en.setName("My name"); em.persist(en); System.out.println(en.getId());
这打印出一个空id!
有什么建议么? 我正在使用MySql,EclipseLink,但需要一个可移植的解决方案。
persist不保证生成ID。 保证ID仅在刷新时生成。 因此,如果您在事务结束之前确实需要ID(并且实体管理器因此被刷新),请明确调用flush()以获取ID:
MyEntity en = new MyEntity(); en.setName("My name"); em.persist(en); em.flush(); System.out.println(en.getId());