Как установить «режим нецепной транзакции» из менеджера сущностей - PullRequest
2 голосов
/ 02 мая 2011

Я пытаюсь вызвать хранимую процедуру, используя собственный запрос запроса от менеджера сущностей, как этот

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

Но когда я ее запустил, я получил следующее сообщение:

Исключение, процедура ... может быть запущена только в режиме свободной цепочки ...

Я знаю, если у меня есть объект подключения, я могу установить con.setAutoComit (true)чтобы сделать эту работу.Но мой вопрос: поскольку у меня есть объект управления объектами, могу ли я установить его как-то из объекта объекта управления?Я хотел бы иметь контейнер для управления всеми ресурсами базы данных ...

Я использую EclipseLink.

спасибо.

Еще одно замечание: у меня нет контроля над базой данных, поэтому я не могу перейти и изменить режим транзакции на «любой».

Ответы [ 2 ]

1 голос
/ 03 мая 2011

Какой драйвер базы данных / JDBC вы используете? Вы используете Sybase JConnect? Я думаю, что это было связано с некоторыми вызовами хранимых процедур.

Если вы не можете решить проблему с базой данных / drvier, EclipseLink имеет опцию для этого.

Используя SessionCustomizer, вы можете установить,

session.getLogin().handleTransactionsManuallyForSybaseJConnect();

Это будет работать, только если EclipseLink контролирует транзакции, а не JTA.

0 голосов
/ 18 мая 2011

Я нашел решение:

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