Java JPA插入和更新

Java JPA插入和更新,java,jpa-2.0,ejb-3.1,Java,Jpa 2.0,Ejb 3.1,我正在学习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()、co

我正在学习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方法,在哪种情况下使用它。

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

为了实现更细粒度的控制,您还可以使用Bean管理的事务,在这些事务中,您需要调用begin和commit/rollback来自己管理生命周期

有关更多详细信息,请参阅:

集装箱管理:
Bean管理:

在大多数情况下,您的代码应该是良好的。在许多EJB开发中,事务的生命周期将由容器处理——因此不需要显式标记事务的开始

为了实现更细粒度的控制,您还可以使用Bean管理的事务,在这些事务中,您需要调用begin和commit/rollback来自己管理生命周期

有关更多详细信息,请参阅:

集装箱管理:
Bean管理:

如果EntityManager是应用程序管理的,那么应该关闭它。这意味着你自己创造了它(没有注射)。您应该使用
开始
提交
。。。如果您希望自己管理事务(
BMT
或Bean管理事务)。但是通常您将使用
CMT
(容器管理的事务),而这种方法将没有用处。如果当前已打开事务,则可以在任何位置使用
flush
。如果要从持久性上下文中分离所有受管理的实体,可以使用
clear
方法


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

如果EntityManager是应用程序管理的,则应关闭它。这意味着你自己创造了它(没有注射)。您应该使用
开始
提交
。。。如果您希望自己管理事务(
BMT
或Bean管理事务)。但是通常您将使用
CMT
(容器管理的事务),而这种方法将没有用处。如果当前已打开事务,则可以在任何位置使用
flush
。如果要从持久性上下文中分离所有受管理的实体,可以使用
clear
方法


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

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


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


begin/commit用于控制事务(以确保)这不是由其他人为您完成的(请参阅其他文章)

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

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();
}

begin/commit用于控制事务(以确保)这不是由其他人为您完成的(请参阅其他文章)

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

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();
}

谢谢你的信息和链接谢谢你的信息和链接谢谢你的信息和链接谢谢你的信息和链接