Somente explicação - Persistence.xml

5 respostas
italoborges

Pessoal, estava tendo problemas com um erro muito comum aqui na minha aplicação.
Fiquei procurando a solução e vi que era simples, estava faltando o arquivo persistence.xml na pasta META-INF.

Eu li bastante a respeito mas não consegui entender, pq eu preciso criar este arquivo “persistence.xml” na pasta META-INF se eu tenho o arquivo de configuração do Hibernate já?

E para aproveitar o tópico, aquele arquivo log4j.xml serve para que?

Obrigado.

5 Respostas

maior_abandonado

italoborges:
Pessoal, estava tendo problemas com um erro muito comum aqui na minha aplicação.
Fiquei procurando a solução e vi que era simples, estava faltando o arquivo persistence.xml na pasta META-INF.

Eu li bastante a respeito mas não consegui entender, pq eu preciso criar este arquivo “persistence.xml” na pasta META-INF se eu tenho o arquivo de configuração do Hibernate já?

E para aproveitar o tópico, aquele arquivo log4j.xml serve para que?

Obrigado.

o persistence.xml é o arquivo de configuração de JPA.

Hibernate é uma das implementações JPA, inclusive além de implementar JPA ele tem algumas implementações próprias… sua aplicação usa a API EntityManager ou Session?

Se você usa Session e não EntityManager, tecnicamente você não deveria precisar de um persistence.xml.

e o log4j.properties serve de configuração do framework de geração de logs, chamado log4j.

R

italoborges:
pq eu preciso criar este arquivo “persistence.xml” na pasta META-INF se eu tenho o arquivo de configuração do Hibernate já?

Se vc usar o persistence.xml não precisa do arquivo do Hibernate.

italoborges

maior_abandonado (que nick é esse? haha), estou usando Session. Antes não estava dando este erro, tentei implementar um código que eu vi, não deu certo, tirei ele e desde então dava este erro.

raf4ever, valeu!

Session e EntityManager fazem a mesma coisa?

maior_abandonado

italoborges:
maior_abandonado (que nick é esse? haha), estou usando Session. Antes não estava dando este erro, tentei implementar um código que eu vi, não deu certo, tirei ele e desde então dava este erro.

raf4ever, valeu!

Session e EntityManager fazem a mesma coisa?

então… http://letras.terra.com.br/cazuza/919100/

quanto a api que você está usando, isso por si só não deveria fazer dar o erro… poste o código de onde está dando o erro, o stack trace do erro… com estas informações talvês possamos te ajudar.

quanto ao que você perguntou para o raf4ever, apenas adiantando a resposta (se me permitem pegar o bonde andando…rs) vamos dizer o seguinte, existem as especificações, elas dizem o que determinada api deve fazer, no caso da especificação JPA, ela diz que deve existir uma classe chamada EntityManager, uma api na qual ela esteja presente e que sirva para trabalhar com ela, devem existir os recursos X, Y e Z… enfim… ai depois disso quem fez a especificação faz a implementação de referência, isso é, um exemplo (que funciona!!!) de implementação, nesse caso a RI é o Eclipselink (ou Toplink). O hibernate também tem essa versão com a api JPA, com o EntityManager e tudo mais, sendo assim ele implementa JPA. Na especificação JPA, uma das coisas especificadas é este arquivo persistence.xml, então se você estiver trabalhando com JPA você terá este arquivo. Porém o hibernate tem outra api também, que ao invés de usar o EntityManager, usa uma outra API, com uma outra classe chamada Session, que faz tudo o que o EntityManager faz, digamos assim, e faz mais coisas, mas não segue a api da especificação. Desta forma, caso você tivesse usando jpa com o hibernate, caso você queira mudar de implementação futuramente, poderia simplesmente tirar o hibernate e colocar outra lib que implemente jpa sem problemas, mas ai você tem que abrir mão dos recursos extra que essa implementação do hibernate lhe dispõe, já que estes recursos não estão na especificação. Usando essa api, você não vai usar o persistence.xml, ao invés disso, configurará pelo hibernate, que pode ser por um arquivo .properties, .xml ou pode configurar programaticamente (via linha de código, sem arquivo externo nenhum).

bom… espero ter sido didático.

italoborges

Tá explicado o nick! :smiley:

Quando eu fiz a pergunta era para os dois mesmo.
Muito boa explicação. Agora deu para dar uma clareada em tudo que eu estava usando! Valeu pela explicação detalhada.

Não está dando erro, consegui consertar, agora só vou tentar achar o pq ele está pedindo o persistence.xml, se eu não estou usando nada referente a JPA.


Criei um novo projeto e ele não pede mais o persistence.xml. Tinha algum cache ou algo do tipo.

Criado 28 de maio de 2012
Ultima resposta 28 de mai. de 2012
Respostas 5
Participantes 3