持久化()之后的JPA commit():必需或不是

时间:2015-07-18 11:29:27

标签: java jpa transactions

我正在开发一个JPA 2.0项目,我正在保存我的Entity类对象,如: -

    InitialContext ctx = new InitialContext();
    UserTransaction userTrans = (UserTransaction) 
    ctx.lookup("java:comp/UserTransaction");
    EntityManagerFactory emf = Persistence.createEntityManagerFactory(PERSISTENCE_NAME);
    EntityManager em = emf.createEntityManager();
    User user = new User("ankit","nigam",25);
    em.persist(user); // persisted in db after this executes
    userTrans.commit(); // whether it is required OR not.

因此,无论我是否使用userTrans.commit(),我的user对象都会在persist()执行后保存在Db中。但我的一些同事说,作为标准,我们应该commit()交易。

我应遵循的方法是什么,以及commit()persist()背后的逻辑。请扔一些灯。

1 个答案:

答案 0 :(得分:1)

您的数据库中是否自动提交?如果是这样,那么无论您是否从应用程序提交事务,更改都会永久存储在您的数据库中。在生产中,自动提交通常设置为OFF,因为它会妨碍DB的性能/响应时间,这就是为什么通常鼓励开发人员控制从其应用程序提交或回滚事务的原因。该链接详细说明了在db2中处理自动提交的命令:http://www.db2util.com/administration/options-db2-command-line-disable-autocommit/