2011-05-02 60 views
2

我试图使用本机查询的呼叫从实体管理器这样

如何设置“非链式事务模式”,从实体管理器

String command = "..."//my stored procedure call command 
Query q = getEntityManager().createNativeQuery(command); 

调用存储过程但是当我运行它,我得到了下面的消息:

异常,程序...可以运行 仅在非链式事务模式...

我知道如果我有一个连接对象,我可以设置con.setAutoComit(true)来使这项工作。 但我的问题是:因为我有一个实体管理器对象,我可以从实体管理器对象以某种方式设置?我想要容器来管理所有数据库资源...

我正在使用EclipseLink。

谢谢。

再一个注意:我没有对数据库端的控制,所以我不能去改变交易模式为“任何”。

回答

0

我找到了解决办法:

getEntityManager().createNativeQuery("set chained off").executeUpdate(); 
1

您使用的是什么数据库/ JDBC驱动程序? 您使用的是Sybase JConnect吗?我认为它存在一些存储过程调用的问题。

如果您无法解决数据库/ drvier上的问题,那么EclipseLink会为此提供一个选项。

使用SessionCustomizer您可以设置,

session.getLogin().handleTransactionsManuallyForSybaseJConnect(); 

这是否具有的EclipseLink交易的控制只会工作,不会与JTA。