java - 使用 EntityManagerFactory 获取刚刚添加的对象

标签 java database persistence entitymanager

我正在开发一个带有 MySql 数据库、JPA 对象和 EntityManagerFactory 的 java 应用程序,并使用 EclipseLink 来管理数据库。一切正常,但我有一个问题。

我的一个 JPA 对象是这样的

public class JPAObject1{
     @Id
     @GeneratedValue
     private int id;
     @OneToMany(//things here)
     List<JPAObject2> list1;
     ...
 }

因此,当我将 id 字段存储在数据库中时,EntityManagerFactory 将自动生成 id 字段。假设 em 类型为 EntityManager,对象类型为 JPAObject1:

em.getTransaction().begin();
em.persist(object);
em.getTransaction().commit();
//house work closing things

JPAObject1 已正确添加,我可以看到数据库中的所有字段。由于字段 id 是执行查找操作的关键,我的问题是: 有没有办法在添加对象时立即获取 EntityManager 上最后添加的对象?

因为我有其他对象使用 JPAObject1 id 字段作为外键,并且当仅将对象添加到数据库中以链接其他对象时我需要该字段,但我知道获取它的唯一方法是获取所有JPAObjects 并获取集合中的最后一个。因此,对于几个对象来说,这不会成为问题,但如果一个进程在数据库上插入,而另一个进程在进程 1 执行 findAll 以获得最后添加的对象之前执行相同的操作,则会出现一致性错误....

我想我已经解释得很好了。

非常感谢!

最佳答案

您可以使用此代码

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

flush后生成的id

关于java - 使用 EntityManagerFactory 获取刚刚添加的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42828901/

相关文章:

java - 共享 EntityManager 上下文中使用的事务的范围是什么?

database - Docker-compose v3 不保留 postgres 数据库

java - LinkedList 多线程在 Runnable 中创建单独的实例

java - 模式匹配时卡住

java - 为什么在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 时不能禁用更改 Activity 的动画?

mysql - 电话资费网站的 ERD - 这是最佳选择吗?

database - 在 Table 中维护 3 个小列还是 1 个大列更好?

php - 虽然php中的嵌套循环从sql数据库中获取数据

java - 从 GUI 保存用户设置

java - 使用 Java8 返回对象本身 N 次的重复方法