【问题标题】:Get just added Object with EntityManagerFactory使用 EntityManagerFactory 获取刚刚添加的对象
【发布时间】:2017-08-07 07:43:23
【问题描述】:

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

我的一个 JPA 对象是这样的

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

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

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

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

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

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

非常感谢!

【问题讨论】:

    标签: java database persistence entitymanager


    【解决方案1】:

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

    【讨论】:

    • 不知道数据被保存为一组,只用数据库中的一个对象进行测试。谢谢
    【解决方案2】:

    你可以使用这个代码

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

    刷新后生成的id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 2013-11-14
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      相关资源
      最近更新 更多