【问题标题】:EclipseLink : JPA Entitty ManagerEclipseLink:JPA 实体管理器
【发布时间】:2014-07-15 13:58:47
【问题描述】:

我想知道在 JPA EntityManager 中使用 EclipseLink 默认的自动提交模式是什么,它是 autocommit-true 还是 false? 如果默认情况下它是假的,当它设置为真时,在提交/回滚期间? 即,在 entitymanager.getTranaction.commit() / entitymanager.getTranaction.rollback() 期间?

最后如何在 JPA Eclipselink 中以编程方式找出自动提交模式? 谢谢!

【问题讨论】:

    标签: jpa eclipselink entitymanager


    【解决方案1】:

    如果您指的是 JDBC 连接上的自动提交,EclipseLink 在启动事务时将其设置为 false,在提交/回滚后将其设置为 true,除非使用 JTA 事务控制器。检查自动提交设置需要从 JPA 获取 JDBC 连接,请参阅http://wiki.eclipse.org/EclipseLink/FAQ/JPA#How_to_access_the_JDBC_connection.3F

    【讨论】:

    • 谢谢,是不是反过来。即,在启动 tran 时将自动提交设置为 false,并在提交/回滚后将其设置回 true。因为,默认情况下,JDBC 会将自动提交设置为 true。我尝试了您提到的示例,当我检查 con.getAutoCommit() 时,它显示为错误。所以我想知道 Eclipse 链接将始终将 autocmoit 模式设置为 false。如有错误请指正。
    • 我尝试了以下代码(在您提供的链接中)并确保自动提交设置为 false em.getTransaction().begin(); ..... final Accessor accessor; if (....) { .... } else { unitOfWork.beginEarlyTransaction(); ....} java.sql.Connection connection = accessor.getConnection(); log.info("Default connection:" + connection.getTransactionIsolation()); log.info("Default getAutoCommit:" + connection.getAutoCommit()); em.getTransaction().commit();
    • 是的,EL 在需要开始事务时将其设置为 false。我已经更正了答案。
    • Okie,这意味着我们不必将自动提交显式设置为 true。但是,我们有一些问题,即使在事务提交之后。数据不会持久化。 (这是在集群环境中)。
    • 你是如何插入的?打开 Eclipselink 日志记录以跟踪可能发生的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-28
    相关资源
    最近更新 更多