我正在尝试使用来自实体管理器的本机查询调用来调用存储过程,如下所示<
String command = "..."//my stored procedure call command
Query q = getEntityManager().createNativeQuery(command);
但是当我运行它时,我收到以下消息:
例外,程序......可以运行 仅在非链式交易模式下...
我知道如果我有一个连接对象,我可以设置con.setAutoComit(true)来使其工作。
但我的问题是:因为我有一个实体管理器对象,我可以从实体管理器对象以某种方式设置它吗?我想让容器管理所有数据库资源......
我正在使用EclipseLink。
感谢。
还有一点需要注意:我没有对数据库方面的控制权,所以我无法将交易模式改为“任何”。
答案 0 :(得分:1)
您使用的是哪种数据库/ JDBC驱动程序? 您使用的是Sybase JConnect吗?我认为它存在一些存储过程调用的问题。
如果你无法解决数据库/ drvier上的问题,那么EclipseLink就有了这个选项。
使用SessionCustomizer,您可以设置
session.getLogin().handleTransactionsManuallyForSybaseJConnect();
这仅在EclipseLink控制事务时才有效,而不是JTA。
答案 1 :(得分:0)
我找到了解决方案:
getEntityManager().createNativeQuery("set chained off").executeUpdate();