【问题标题】:EntityManager.flush(), EntityManager.getTransaction.commit(), What is the standard usage ?EntityManager.flush(), EntityManager.getTransaction.commit(), 标准用法是什么?
【发布时间】:2014-01-31 18:54:17
【问题描述】:

我试图了解持久性上下文和数据库之间的同步是如何工作的。下面的代码运行得很好:

EntityManagerFactory factory = Persistence.createEntityManagerFactory("ProjectA");
EntityManager em = factory.createEntityManager();

em.getTransaction().begin();

for(String name : names) {
    Student toInsert = new Student();
    toInsert.setName(name);
    em.persist(toInsert);
}

em.getTransaction().commit();
  • 但是flush() 方法在哪里?我什至必须使用它吗?

  • 我每次都必须getTransaction.begin() 吗?

  • 更新数据库中信息的标准格式是什么 休眠?

【问题讨论】:

    标签: hibernate persistence jpa-2.0


    【解决方案1】:
    1. 不需要刷新,因为提交会自动为您刷新。在执行需要将数据保存到数据库以避免内存堆的长时间运行事务时,您需要刷新(或)如果您出于某种原因需要将会话中的数据同步到数据库。
    2. 如果您觉得开始交易很乏味,您可以使用spring declarative transactions。通过这样做,spring 将负责围绕方法创建事务边界,并根据方法中发生的情况提交/回滚数据。易于使用,但有其自身的局限性,例如它不允许我们处理回滚。
    3. 更新对象取决于对象的上下文(会话中有一个对象/会话中没有对象)主要使用 session.merge(object),因为它为您解决了几个场景。但请确保您拥有需要保存的分离对象上的所有数据集,否则您最终会删除未加载的数据。

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 1970-01-01
      • 2011-04-22
      • 2015-10-24
      • 2020-08-04
      • 1970-01-01
      • 1970-01-01
      • 2017-08-02
      相关资源
      最近更新 更多