【问题标题】:JPA + Hibernate + autocommitJPA + 休眠 + 自动提交
【发布时间】:2010-11-16 17:14:06
【问题描述】:

有人知道为什么我在 JPA 配置文件中关闭自动提交时会收到此警告吗?

使用此设置:

<property name="hibernate.connection.autocommit" value="false"/>

生成此警告:

2009-08-04 09:54:10,621 [main] WARN org.hibernate.ejb.Ejb3Configuration - hibernate.connection.autocommit = false break the EJB3 specification

这将如何破坏 EJB3 规范?

【问题讨论】:

    标签: java hibernate jpa


    【解决方案1】:

    来自 EJB 3.0 规范的第 13.3.4 节:

    enterprise bean 的业务 方法,消息侦听器方法, 业务方法拦截器方法,生命周期回调拦截器 方法,或超时回调方法 不得使用任何资源管理器 具体交易管理方法 这会干扰 集装箱的分界线 交易边界。例如, 企业 bean 方法不得使用以下方法 java.sql.Connection 接口:提交, setAutoCommit,并回滚;或以下方法 javax.jms.Session 接口:提交和 回滚。

    【讨论】:

    • 我没有这样的方法,只有当我在 JPA 配置中设置 hibernate.connection.autocommit=true 时才会出现该消息。
    • Hibernate 可能会调用该方法本身。我猜你不需要指定 autocommit=false
    • 不确定。下面是代码的样子: //一些规范合规性检查 857 //TODO 集中? 858 if ( ! "true".equalsIgnoreCase( cfg.getProperty( Environment.AUTOCOMMIT ) ) ) { 859 log.warn( Environment.AUTOCOMMIT + " = false 打破 EJB3 规范" ); 860 } 还有一些来自文档的内容: hibernate.connection.autocommit :为 JDBC 池连接启用自动提交(不推荐)。例如真实 | false 我认为这只是 Miguel 指出的警告(不确定它是否仍在使用),因为无论如何您都必须开始交易,所以现在这没有意义。
    • 好的,结果不太好,cmets 中的代码不起作用。结论:不需要它,即使插入一条记录,您也必须启动事务(如果不这样做,则会出现异常)。我仍然找不到一个文件说这是过时的(或一些更好的解释)。
    猜你喜欢
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-05-17
    • 2020-06-25
    • 2016-01-19
    • 2013-06-19
    • 2011-06-25
    相关资源
    最近更新 更多