【问题标题】:JPA Insert and UpdateJPA 插入和更新
【发布时间】:2012-08-19 08:05:50
【问题描述】:

我正在学习 EJB3.1 和 JPA2

我正在为插入和更新做以下事情

插入

Common com = new Common();
com.setKeyData(keyData);
com.setKeyValue("0001");
em.persist(com);

更新

Common com = em.find(Common.class, pk);
com.setKeyValue("0002");

上面的代码有效,但我想知道插入和更新是否只需要这样做。 我看到很少有他们做 begin()、commit() 等的帖子(可能在 Swing 应用程序中使用)。 由于我是 JPA/ORM 的新手,我真的很想知道上面的代码是否足以用于具有大量数据负载的应用程序,是否有我遗漏的内容,或者我应该阅读/了解有关插入/更新数据的更多信息。

什么时候应该使用EntityManager的close、clear和flush方法,在什么场景下使用。

【问题讨论】:

    标签: java jpa-2.0 ejb-3.1


    【解决方案1】:

    您的代码在大多数情况下应该没问题。在很多 EJB 开发中,事务的生命周期将由容器处理——因此无需显式标记事务的开始。

    对于更细粒度的控制,您还可以使用 Bean 托管事务,您需要在其中调用 begin 和 commit/rollback 来自己管理生命周期。

    更多详情请看:

    容器管理:http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction3.html Bean 托管:http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Transaction4.html

    【讨论】:

    • 感谢您的信息和链接
    【解决方案2】:

    将 EJB 与 JPA 一起使用时,您不必担心在开始事务、提交它们之后。 所有这些都由底层的 Container 完成。 使用 EJB 时,您只需要使用 @PersistentContext(name="CustDB") 注释它

    @PersistenceContext(name="PersistentUnitName")
    private EntityManager entityManager;
    

    【讨论】:

      【解决方案3】:

      begin/commit 用于控制事务(以确保 ACID),如果这不是由其他人为您完成的(请参阅其他帖子)。

      事务的可能用法如下所示:

      EntityManager em = ...
      EntityTransaction tx = null;
      try {
        tx = em.getTransaction();
        tx.begin();
        // your code that should be executed within the transaction
        tx.commit();
      } catch(Exception ex) {
        // roll back if something failed
        if (tx != null && tx.isActive()) {
          tx.rollback();
        }
      } finally {
        // make sure em is closed on commit and on rollback
        em.close();
      }
      

      【讨论】:

        【解决方案4】:

        如果EntityManager 由应用程序管理,您应该关闭它。这意味着您自己创建了它(没有注入)。如果您想自己管理事务(BMT 或 Bean Managed Transaction),您应该使用 begin,commit ...。但通常你会使用CMT(Container Managed Transaction),这种方法没有用。如果交易当前已打开,您可以在任何地方使用flush。如果你想从持久化上下文中分离所有被管理的实体,你可以使用clear 方法。

        但我的回答很简短,我认为this link 对你有用。相关书籍中也有很多细节。

        【讨论】:

        • 感谢您的信息和链接
        猜你喜欢
        • 2021-03-15
        • 2019-03-23
        • 2016-03-16
        • 2019-12-22
        • 2012-07-01
        • 2018-01-13
        • 2011-03-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多