2012-03-15 3 views
0

Я пытаюсь получить результат из хранимой процедуры, используя Hibernate в сессионном компоненте EJB без состояния.Результат из хранимой процедуры с использованием JPA/Hibernate

Хранимая процедура работает на MS SQL Server 2008 и принимает целое число как параметр и возвращает другое целое число.

мне удалось вызвать процедуру, используя

Query q = em.createNativeQuery("name_of_my_procedure :param"); 
q.setParameter("param", sequence); 
q.executeUpdate(). 

Использование getResultList или getSingleResult вместо executeUpdate, всегда приводит к забавным исключением.

В EJB 3.0 в действии я нашел это:

JPA не поддерживает хранимые процедуры, и вы должны зависеть от собственной функции вашего поставщика сохраняемости

Я нашел несколько сообщений говоря об использовании CallableStatement через SQL Connection, но это решение выглядит довольно неуместным.

Есть ли способ получить сгенерированный идентификатор с помощью Hibernate?

спасибо.

Fred.

+0

все это просто, если вы можете использовать функцию вместо хранимой процедуры. Можете ли вы? – ManuPK

ответ

0

В конце концов, я исправил его с помощью другой хранимой процедуры.

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

Я знаю, что это не самый элегантный способ сделать это, но я не хотел смешивать/использовать код подключения SQL с JPA-кодом.

0

Не ответ на ваш вопрос как таковой, но FYI JPA 2.1 поддерживает (или будет поддерживать, когда будет выпущен) stored procedure API. Единственной реализацией JPA, предоставляющей этот AFAIK, является DataNucleus JPA.

+0

я уже был здесь смотрите: https://blogs.oracle.com/arungupta/entry/jpa_2_1_early_draft Это выглядит довольно интересно, и это будет соответствовать моим потребностям, но в то же время мне нужно решение, используя JPA 2.0. Что относительно TopLink? Не поддерживает ли он также вызовы хранимых процедур? – Fred

Смежные вопросы