刚刚使用EntityManagerFactory

时间:2017-03-16 08:34:40

标签: java database persistence entitymanager

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

我的一个JPA对象就像这样

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

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

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

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

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

我想我已经很好地解释了它。

非常感谢!

2 个答案:

答案 0 :(得分:1)

您可以使用此代码

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

刷新后的id

答案 1 :(得分:1)

请注意,保存到数据库的数据是一个集合,而不是列表。所以他们没有订单或类似的东西,你不能得到你已经添加的最后一个。如果你愿意,请添加一个像日期,时间......的列,查询将如下: &#34; SELECT * FROM Table ORDER BY dateColumn DESC LIMIT 1&#34;