You cannot set autocommit during a managed transaction

goodlucktomyself 2012-05-12 11:33:47
最近遇到一个头大的问题:把ejb部署到jobss5.0,其中持久层是hibernate3.2,然后在调用ejb时,老是报异常:
java.sql.SQLException: You cannot set autocommit during a managed transaction!
hibernate.cfg.xml配置如下:
<session-factory>
<property name="hibernate.connection.datasource">java:/my_datasource</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JTATransactionFactory</property>
<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.JBossTransactionManagerLookup</property>
<property name="hibernate.show_sql">false</property>
<property name="jdbc.batch_size">50</property>
<property name="hbm2ddl.auto">update</property>
<mapping resource="xxx/xxx/xxx/xxx.hbm.xml" />
......
</session-factory>

,后来看了下hibernate的相关文档,然后设置自动提交为false,在hibernate配置文件中加上:
<property name="hibernate.connection.autocommit">false</property>
<property name="hibernate.connection.release_mode ">auto</property>
,还是不管用,很是郁闷了。

再说明下:打开session的方式是sessionFactory.openSession()
求救:这是肿么回事?????????
...全文
424 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
goodlucktomyself 2012-05-14
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
把 hibernate. 去掉 ,
hibernate.properties 属性文件里面 要用hibernate.

hibernate.cfg.xml配置文件里面 设置属性时 不要再属性名前面加上hibernate.

例如<property name="hibernate.connection.autocommit">false</property>
应该改成 <property……
[/Quote]
按照你这种方法试了下,也还是存在同样的问题,异常信息:
17:45:37,009 ERROR [SchemaUpdate] could not complete schema update
java.sql.SQLException: You cannot set autocommit during a managed transaction!
at org.jboss.resource.adapter.jdbc.BaseWrapperManagedConnection.setJdbcAutoCommit(BaseWrapperManagedConnection.java:598)
at org.jboss.resource.adapter.jdbc.WrappedConnection.setAutoCommit(WrappedConnection.java:458)
at org.hibernate.tool.hbm2ddl.SuppliedConnectionProviderConnectionHelper.prepare(SuppliedConnectionProviderConnectionHelper.java:36)
at org.hibernate.tool.hbm2ddl.SchemaUpdate.execute(SchemaUpdate.java:127)
at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:314)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1300)
at com.isw2.priorityclub.factory.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31)
_jerrytiger 2012-05-14
  • 打赏
  • 举报
回复
java.sql.SQLException: You cannot set autocommit during a managed transaction!

去掉<property name="hibernate.connection.autocommit">false</property> 试试。
_jerrytiger 2012-05-12
  • 打赏
  • 举报
回复
把 hibernate. 去掉 ,
hibernate.properties 属性文件里面 要用hibernate.

hibernate.cfg.xml配置文件里面 设置属性时 不要再属性名前面加上hibernate.

例如<property name="hibernate.connection.autocommit">false</property>
应该改成 <property name="connection.autocommit">false</property>
下载代码方式:https://pan.quark.cn/s/c66ecb4d06ce 同源策略:从安全角度出发,浏览器会对脚本发起的跨站请求施加限制,要求JavaScript或Cookie仅能获取同源(即协议、域名和端口完全一致)下的资源。正因如此,不同项目间的调用会受到浏览器的阻碍。以常见情境为例:WebApi作为数据服务层,它是一个独立的项目,而MVC项目则承担Web的展示功能,此时MVC项目需要调用WebApi中的接口以获取数据并在页面上呈现。由于WebApi与MVC属于两个独立的项目,运行后便会产生前面提及的跨域问题。WebApi的跨域问题主要源于浏览器的同源策略,这是一种安全措施,旨在限制JavaScript或Cookie仅能访问同一源(包括协议、域名和端口)下的内容。在实际开发过程中,当WebApi作为一个独立服务,例如数据服务层,而MVC项目作为前端展示层时,两者运行在不同的项目和端口下,浏览器将阻止MVC对WebApi的跨域请求,从而影响数据的正常获取。为了应对这一问题,我们可以采用CORS(跨域资源共享)机制。CORS通过在HTTP请求与响应头中嵌入特定标识,向浏览器明确哪些跨域请求是被允许的。例如,服务器可以在响应头中添加`Access-Control-Allow-Origin:http://localhost:8081`,表示允许来自http://localhost:8081的请求访问资源。解决WebApi跨域问题的具体实施步骤如下: 1. 构建一个包含MVC项目(Web)与Web API项目(WebApiCORS)的解决方案。 2. 在MVC项目中,例如Home控制器的Index视图,通过Ajax向WebApiCORS发起跨域请求。 3...

67,535

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧