Pessoal,
Preciso chamar uma procedure usando o EntityManager do Hibernate. Tem como fazer isso? Tentei usar o prepareCall mas ele precisa de uma Connection e não um EntityManager.
Se alguem tiver uma luz, mt obrigado
Pessoal,
Preciso chamar uma procedure usando o EntityManager do Hibernate. Tem como fazer isso? Tentei usar o prepareCall mas ele precisa de uma Connection e não um EntityManager.
Se alguem tiver uma luz, mt obrigado
existe uma forma bem bizarra de fazer… é triste… é feio… mas as vezes é a vida… eu não sei chamar o Procedure de outra forma… mas assim dá!
[code]EntityManager em = getEnittyManager(); //abstraindo como vc recebe o EntityManager…
Connection con = ((HibernateEntityManager)em).getSession().connection();[/code]
… bom dessa forma você consegue pegar a conexão através de um EntityManager do Hibernate… é feio, é errado, mas é a forma que sei fazer…
[quote=Lavieri]existe uma forma bem bizarra de fazer… é triste… é feio… mas as vezes é a vida… eu não sei chamar o Procedure de outra forma… mas assim dá!
[code]EntityManager em = getEnittyManager(); //abstraindo como vc recebe o EntityManager…
Connection con = ((HibernateEntityManager)em).getSession().connection();[/code]
… bom dessa forma você consegue pegar a conexão através de um EntityManager do Hibernate… é feio, é errado, mas é a forma que sei fazer…[/quote]
Estou tento esse erro:
Antes de mais nada:
Está usando EJB3?
A conexão ao banco é obtida via DataSource/JNDI? (Se não sabe, mande seu persistence.xml)
Por que isso? Porque é possível obter a conexão como um DataSource direto, sem intermédio do Hibernate. Talvez seja a melhor opção.
[quote=Leonardo3001]Antes de mais nada:
Está usando EJB3?
A conexão ao banco é obtida via DataSource/JNDI? (Se não sabe, mande seu persistence.xml)
Por que isso? Porque é possível obter a conexão como um DataSource direto, sem intermédio do Hibernate. Talvez seja a melhor opção.
[/quote]
Sim…acho q é EJB3, a aplicação usa o EntityManager do javax.persistence
A conexão usa datasource. Segue o persistence.xml:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="user_adm">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/jdbc/aplicOracleDS</jta-data-source>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.format_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
[quote=eduacsp][quote=Lavieri]existe uma forma bem bizarra de fazer… é triste… é feio… mas as vezes é a vida… eu não sei chamar o Procedure de outra forma… mas assim dá!
[code]EntityManager em = getEnittyManager(); //abstraindo como vc recebe o EntityManager…
Connection con = ((HibernateEntityManager)em).getSession().connection();[/code]
… bom dessa forma você consegue pegar a conexão através de um EntityManager do Hibernate… é feio, é errado, mas é a forma que sei fazer…[/quote]
Estou tento esse erro:
[quote]
javax.ejb.EJBException: java.lang.ClassCastException: org.jboss.ejb3.entity.InjectedEntityManager cannot be cast to org.hibernate.ejb.HibernateEntityManager
[/quote][/quote]
pq vcs nunca leem o stacktrace do erro ?? ta descrito ai bem simples…
org.jboss.ejb3.entity.InjectedEntityManager não pode ser castado em HibernateEntityManager… ou seja…
no lugar de
Connection con = ((HibernateEntityManager)em).getSession().connection();
use
o problema é que na sua aplicação o objeto real é uma InjectedentityManager
Usando createNativeQuery funciona
[quote=Lavieri][quote=eduacsp][quote=Lavieri]existe uma forma bem bizarra de fazer… é triste… é feio… mas as vezes é a vida… eu não sei chamar o Procedure de outra forma… mas assim dá!
[code]EntityManager em = getEnittyManager(); //abstraindo como vc recebe o EntityManager…
Connection con = ((HibernateEntityManager)em).getSession().connection();[/code]
… bom dessa forma você consegue pegar a conexão através de um EntityManager do Hibernate… é feio, é errado, mas é a forma que sei fazer…[/quote]
Estou tento esse erro:
[quote]
javax.ejb.EJBException: java.lang.ClassCastException: org.jboss.ejb3.entity.InjectedEntityManager cannot be cast to org.hibernate.ejb.HibernateEntityManager
[/quote][/quote]
pq vcs nunca leem o stacktrace do erro ?? ta descrito ai bem simples…
org.jboss.ejb3.entity.InjectedEntityManager não pode ser castado em HibernateEntityManager… ou seja…
no lugar de
Connection con = ((HibernateEntityManager)em).getSession().connection();
use
o problema é que na sua aplicação o objeto real é uma InjectedentityManager[/quote]
Agora o erro que dá é esse: