选择Sybase DB中的多态交易中的命令不允许进行



i是冬眠的新手,并试图使用Hibernate从Java文件执行一个步骤。当我试图运行应用程序时,我会遇到一个错误,如

存储过程'dbo.p_chklist_test'可以仅在未链接的交易模式下运行。"设置链接"命令将导致当前会话使用未链接的交易模式。

我已经在几个论坛上检查了,并通过在下面的命令下运行将模式设置为"任何模式"。sp_procxmode p_chklist_test," Anymode"

也将自动提交设置为Hibernate中的False。

现在我遇到了一个不同的错误,例如以下

Caused by: org.hibernate.exception.GenericJDBCException: could not execute native bulk manipulation query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:198)
    at org.hibernate.impl.SessionImpl.executeNativeUpdate(SessionImpl.java:1191)
    at org.hibernate.impl.SQLQueryImpl.executeUpdate(SQLQueryImpl.java:357)
    at com.lcit_release.server.dao.ReleaseItemDao.searchRecordsNew(ReleaseItemDao.java:198)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:107)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
    at $Proxy8.searchRecordsNew(Unknown Source)
    at com.lcit_release.server.logic.ReleaseItemLogic.searchExisting(ReleaseItemLogic.java:147)
    at com.lcit_release.server.adapter.ReleaseItemLogicAdapter.search(ReleaseItemLogicAdapter.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
    ... 41 more

**Caused by: com.sybase.jdbc3.jdbc.SybSQLException: SELECT INTO command not allowed within multi-statement transaction.**
    at com.sybase.jdbc3.tds.Tds.a(Unknown Source)
    at com.sybase.jdbc3.tds.Tds.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.ResultGetter.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.nextResult(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.updateLoop(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybStatement.executeUpdate(Unknown Source)
    at com.sybase.jdbc3.jdbc.SybPreparedStatement.executeUpdate(Unknown Source)
    at msjava.tools.db.jdbc3.MSDBPreparedStatementImpl.executeUpdate(MSDBPreparedStatementImpl.java:315)
    at msjava.tools.db.jdbc3.MSDBPreparedStatement.executeUpdate(MSDBPreparedStatement.java:78)
    at org.hibernate.engine.query.NativeSQLQueryPlan.performExecuteUpdate(NativeSQLQueryPlan.java:189)
    ... 62 more

我有几个检查网站的错误在多态事务中不允许命令中不允许命令,并将参数设置为" serverInitiatiedTransactions" as false在配置中的false xml xml

**<ConnectProperties>
    <Property name="ServerInitiatedTransactions">false</Property>
</ConnectProperties>**  

但这甚至可以解决问题,我遇到了同样的错误。有人可以帮助我吗?

我的代码:

 String sql3 ="exec dbo.p_chklist_test";
         System.out.println("sql 3 is "+sql3);
            Query query = sessionFactory.getCurrentSession().createSQLQuery(sql3);

             sessionFactory.getCurrentSession().connection().setAutoCommit(false);

         query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

         listRelItem = query.list();

预先感谢!

请检查您的存储过程中的语句

从学生中选择ID。

从DB的角度来看,此语句是可以的,但是当从Java程序执行时,这将不起作用并给出上述错误。

首先,定义临时表

创建表#A(id int)

插入#A从学生中选择ID

上面的修复工作。

我通过以下面的方式调用该过程解决了问题。希望它可以帮助其他人弄清楚。

设置链接的tecect exec p_qa_existing_items

这可能是因为您应该"永远不要"尝试"选择",而交易(选择@@交易)是打开的,请从任何平台Java或任何其他应用程序中调用它。

我相信@Swat提供的解决方案几乎是您应该使用的,而不是束缚的。正如我所知道的,由于您的代码中,可能会产生影响。因此,当需要打开交易时,SP可能没有任何代码

您可以在Sybase中使用此游戏 -

创建Proc TestProc作为从表中选择 * *进入#temp返回去

开始tranEXEC TEST_PROC提交tran

开始tranEXEC TEST_PROC回滚tran

(我现在没有我的Sybase环境,所以无法亲自检查它。但是,这绝对可以帮助您理解原因)

我使用JBOSS遇到了同样的问题,我无法更改该过程,因为它是由客户提供的。在我的情况下,问题在配置数据源以使用

后停止了
jta="false".

最新更新