如何使用JPA获取最后一个持久化实体的Id

时间:2012-03-10 19:33:20

标签: java jpa entity

我正在寻找一种智能且易读的方法来使用JPA来获取持久化实体的ID。该ID为Integer

人们可以想到以下解决方案:

  1. 不使用GeneratedValue策略。这需要在持久化之前寻找一个免费的id,然后将它放入要保留的实体中:麻烦,但有效。
  2. 采用GeneratedValue策略。持久性提供程序将负责id生成。这看起来更聪明,但如何获得身份证?
  3. 见下文解决方案2

    MyEntity en = new MyEntity();
    en.setName("My name");
    em.persist(en);
    System.out.println(en.getId());
    

    这会打印一个空id!

    有什么建议吗?我正在使用MySql,EclipseLink,但需要一个可移植的解决方案。

1 个答案:

答案 0 :(得分:53)

坚持不保证生成ID。保证ID仅在刷新时生成。因此,如果您在事务结束之前确实需要ID(并且实体管理器因此被刷新),请明确调用flush()以获取ID:

MyEntity en = new MyEntity();
en.setName("My name");
em.persist(en);
em.flush();
System.out.println(en.getId());