gpt4 book ai didi

java - 在 Hibernate for Sybase DB 的多语句事务中不允许使用 SELECT INTO 命令

转载 作者:行者123 更新时间:2023-11-29 03:24:43 24 4
gpt4 key购买 nike

我是 hibernate 的新手,并尝试使用 hibernate 从 Java 文件执行一个过程到 Sybase 数据库。当我尝试运行该应用程序时,出现如下错误

存储过程“dbo.p_chklist_test”只能在非链式事务模式下运行。 “SET CHAINED OFF”命令将导致当前 session 使用非链接事务模式。

我检查了几个论坛并通过运行以下命令将模式设置为“任何模式”。sp_procxmode p_chklist_test, "任意模式"

此外,我在 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

我已经检查了几个站点的错误 SELECT INTO command not allowed within multi-statement transaction 并在配置 xml 中将参数 “ServerInitiatedTransactions” 设置为 false

**<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();

提前致谢!

最佳答案

请检查您的存储过程中是否有如下语句

SELECT id INTO #a FROM students.

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

首先定义临时表

创建表#a(标识符整数)

插入#a从学生中选择 id

以上修复有效。

关于java - 在 Hibernate for Sybase DB 的多语句事务中不允许使用 SELECT INTO 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21605632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com