Recuperar um java.sql.Connection do EntityManager

Boa Tarde, Gostaria de saber se e possivel recuperar um java.sql.Connection , ou entao gostaria de saber se e possivel executar comandos de um script.sql por EntityManager.

Att
Marcus Barcelos

Taí uma coisa que não tentei ainda! :smiley:

Então, você tentou ler o arquivo em uma String e rodar em.createNativeQuery(String); ?

Se conseguir, posta a solução.

[quote=mvlbarcelos]Boa Tarde, Gostaria de saber se e possivel recuperar um java.sql.Connection , ou entao gostaria de saber se e possivel executar comandos de um script.sql por EntityManager.
[/quote]

Não é possivel.
Só não é possivel porque é absurdo. O papel do EntityManager não é executar SQL

Use um DataSource e pegue o connection de lá.

[quote=sergiotaborda][
Só não é possivel porque é absurdo. O papel do EntityManager não é executar SQL
[/quote]

Realmente nao é o papel, mas infelizmente da: pelo createNativeQuery como disse gleise!

Da pra pegar a Connection normalmente pelo getDelegate()

E na JPA 2 vai dar pra pegar Connection por padrao!

[quote=Paulo Silveira][quote=sergiotaborda][
Só não é possivel porque é absurdo. O papel do EntityManager não é executar SQL
[/quote]

Realmente nao é o papel, mas infelizmente da: pelo createNativeQuery como disse gleise!
[/quote]

Assim consegue executar SQL nativo , isso é diferente de pegar o connection

[quote]
Da pra pegar a Connection normalmente pelo getDelegate()

E na JPA 2 vai dar pra pegar Connection por padrao![/quote]

Ao que o mundo chegou … :cry:

[quote=sergiotaborda][quote=Paulo Silveira][quote=sergiotaborda][
Só não é possivel porque é absurdo. O papel do EntityManager não é executar SQL
[/quote]

Realmente nao é o papel, mas infelizmente da: pelo createNativeQuery como disse gleise!
[/quote]

Assim consegue executar SQL nativo , isso é diferente de pegar o connection

[quote]
Da pra pegar a Connection normalmente pelo getDelegate()

E na JPA 2 vai dar pra pegar Connection por padrao![/quote]

Ao que o mundo chegou … :cry: [/quote]
Na certa eles tomaram a decisão certa. Isso porque JPA não cobre todas as possibilidades possiveis de uso em um banco de dados (me diz como se lê uma arquivo de 100mb via stream por JPA que eu quero ver) :roll:
Com isso eles deixam o desenvolvedor mais livre para se virar ao inves de esperar que eles desenvolvam tudo o que precisamos.
Acho que este topico pode ajudar muita gente.

Assim vc consegue recuperar um java.sql.Connection do JPA (se o persisistence.xml usar transaction-type=“RESOURCE_LOCAL”)

Connection jpa = ((oracle.toplink.essentials.ejb.cmp3.EntityManager) em).getServerSession().getDefaultConnectionPool().acquireConnection().getConnection();

Até mais
Rogério