JPA插入和更新

时间:2012-08-23 18:26:39

标签: java jpa-2.0 ejb-3.1

我正在学习EJB3.1和JPA2

我正在做插入和更新的事情

INSERT

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

更新

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

上面的代码有效,但我想知道是否只需要插入和更新。 我看到他们做的几个帖子开始(),commit()等(可能在swing应用程序中使用)。 由于我是JPA / ORM的新手,我真的想知道上面的代码是否足以满足大量数据加载的应用程序,有什么我缺少的,或者我应该阅读/了解有关插入/更新数据的更多信息。

我何时应该使用EntityManager的close,clear和flush方法,在哪种情况下使用它。

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

开始/提交用于控制交易(以确保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();
}

答案 2 :(得分:0)

如果是应用程序管理的,您应该关闭EntityManager。这意味着您自己创建(无需注入)。您应该使用begincommit ...如果您想自己管理您的交易(BMT或Bean管理交易)。但通常您将使用CMT(容器管理事务),此方法将无用。如果当前打开了交易,您可以在任何地方使用flush。如果要从持久性上下文中分离所有已管理的实体,可以使用clear方法。

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

答案 3 :(得分:0)

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

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