使用 EntityManagerFactory 获取刚刚添加的对象
Get just added Object with EntityManagerFactory
我正在开发一个 java 应用程序,其中包含 MySql 数据库、JPA 对象和带有 EclipseLink 的 EntityManagerFactory 来管理数据库。一切正常,但我有一个问题。
我的一个 JPA 对象是这样的
public class JPAObject1{
@Id
@GeneratedValue
private int id;
@OneToMany(//things here)
List<JPAObject2> list1;
...
}
所以当我将它存储在数据库中时,id 字段将由 EntityManagerFactory 自动生成。 Asumming em 类型 EntityManager 和对象类型 JPAObject1:
em.getTransaction().begin();
em.persist(object);
em.getTransaction().commit();
//house work closing things
正确添加了 JPAObject1,我可以看到数据库中的所有字段。由于字段 id 是执行查找操作的关键,我的问题是:
有没有办法在添加 EntityManager 的那一刻获取最后添加的对象?
因为我有其他对象使用 JPAObject1 id 字段作为外键,当对象被添加到数据库时我需要该字段 link 其他对象,但我知道的唯一方法获取它是获取所有 JPAObjects 并获取 Collection 中的最后一个。因此,对于一些对象,这不会有问题,但是如果一个进程在数据库中插入,而另一个进程在进程 1 执行 findAll 以获取最后一个添加之前执行相同的操作,则会出现一致性错误....
我觉得我已经解释的很好了。
非常感谢!
您可以使用此代码
Obejct en = new Obejct ();
en.setxxx("My name");
em.persist(en);
em.flush();
System.out.println(en.getId());
flush后生成的id
注意保存到数据库中的数据是集合,不是列表。所以他们没有订单或类似的东西,你无法获得你添加的最后一个。如果你想,请添加一个列,如日期、时间......,查询将是这样的:
" SELECT * FROM Table
ORDER BY dateColumn
DESC LIMIT 1"
我正在开发一个 java 应用程序,其中包含 MySql 数据库、JPA 对象和带有 EclipseLink 的 EntityManagerFactory 来管理数据库。一切正常,但我有一个问题。
我的一个 JPA 对象是这样的
public class JPAObject1{
@Id
@GeneratedValue
private int id;
@OneToMany(//things here)
List<JPAObject2> list1;
...
}
所以当我将它存储在数据库中时,id 字段将由 EntityManagerFactory 自动生成。 Asumming em 类型 EntityManager 和对象类型 JPAObject1:
em.getTransaction().begin();
em.persist(object);
em.getTransaction().commit();
//house work closing things
正确添加了 JPAObject1,我可以看到数据库中的所有字段。由于字段 id 是执行查找操作的关键,我的问题是: 有没有办法在添加 EntityManager 的那一刻获取最后添加的对象?
因为我有其他对象使用 JPAObject1 id 字段作为外键,当对象被添加到数据库时我需要该字段 link 其他对象,但我知道的唯一方法获取它是获取所有 JPAObjects 并获取 Collection 中的最后一个。因此,对于一些对象,这不会有问题,但是如果一个进程在数据库中插入,而另一个进程在进程 1 执行 findAll 以获取最后一个添加之前执行相同的操作,则会出现一致性错误....
我觉得我已经解释的很好了。
非常感谢!
您可以使用此代码
Obejct en = new Obejct ();
en.setxxx("My name");
em.persist(en);
em.flush();
System.out.println(en.getId());
flush后生成的id
注意保存到数据库中的数据是集合,不是列表。所以他们没有订单或类似的东西,你无法获得你添加的最后一个。如果你想,请添加一个列,如日期、时间......,查询将是这样的:
" SELECT * FROM Table
ORDER BY dateColumn
DESC LIMIT 1"