O que é o EntityManager do hibernate?

Galera, alguem poderia me explicar o que é o entitymanager do hibernate? O que ele acrecentaria em uma aplicação? Agradeço desde já :slight_smile:

O Hibernate é um framework ORM. A partir do JEE 5, a Sun disponibilizou uma especificação para ORM, conhecida como JPA (java persistence api).
Alguns frameworks implementam o JPA, como o Hibernate, Toplink, Apache OpenJPA.

No caso específico do Hibernate, para você poder usar a JPA, você deve utilizar além do Hibernate-core, o hibernate-annotations e o hibernate-entitymanager.

Na minha opinião, ele é melhor que o Hibernate puro (embora o hibernate puro tenha uma coisa que eu gosto muito, que é o critéria), pois JPA é uma especificação oficial, e funciona muito bem em conjunto com outros módulos JEE (como EJB 3).

Trabalhar tanto com hibernate puro, como com JPA são similares, os conceitos são parecidos, portanto acho que é uma boa seguir a especificação oficial. (IMHO)

Acrescentando o que o amigo falou acima, o EntityManager é o que o proprio nome diz, “gerenciador de entidade”.
Com o EntityManager, vc tem o conceito de estados de objeto e outras coisas mais.

Da uma lida aki:

Vai te dar uma noção do que é isso.

Depois, mete a mao no codigo e ve as operações que ele te fornece… E lembre-se, se vc realmente nao precisar de nada além do que está na especificação do JPA, NAO utilize o EntityManager do tipo que o Hibernate implementa, ou seja, abstraia a implementação, da mesma for que é melhor vc declara um atributo de tipo List ao inves de um ArrayList.

VLW

Complementando o meu post:

Para ver isso de estados do objeto que eu falei. (muito importante)

Vou ler os links galera, jaja comento

Bom galera, primeiramente eu entendi que pra usar o entity manager, o mapeamento tem que ser feito usando JPA(Hibernate Annotation), certo? Usando xml, funcionaria? Outra coisa, nos exemplos que eu vi nesses links, nao vi nada d+ que o hibernate core somente nao faça, a nao ser uma coisa que achei interessante, eh vc poder ter varios bancos ao mesmo tempo, usando o PersistenceUnit e criando varios persistence.xml. Eu posso estar errado, mais teria grande vantagem em usar o entitymanager em vez de somente o core do hibernate? Existe alguma coisa que nao só se poderia fazer utilizando o entitymanager? Obrigado

Opa, no hibernate puro vc tbm pode se conectar a mais de um banco ao mesmo tempo. Basta configurar isso no xml do hibernate lá…

Tecnicamente o resultado de usar o hibernate puro ou com jpa é a mesma coisa. A vantagem de se utilizar o jpa é que caso um dia vc queira mudar de implementação, ou seja, trocar de hibernate pra toplink por exemplo, vc não vai ter que mudar nada no seu projeto…

Alguns até dizem que JPA é para os frameworks de persistência a mesma coisa que o JDBC é para os drives de bancos…

Opa, no hibernate puro vc tbm pode se conectar a mais de um banco ao mesmo tempo. Basta configurar isso no xml do hibernate lá…

Tecnicamente o resultado de usar o hibernate puro ou com jpa é a mesma coisa. A vantagem de se utilizar o jpa é que caso um dia vc queira mudar de implementação, ou seja, trocar de hibernate pra toplink por exemplo, vc não vai ter que mudar nada no seu projeto…

Alguns até dizem que JPA é para os frameworks de persistência a mesma coisa que o JDBC é para os drives de bancos… [/quote]

Opa amigo, quando ao JPA ser um padrao eu entendi, e entendo a vantagem, mais a minha duvida mesmo é sobre o bendito entitymanager, pois eu posso usar o JPA e nao usar o entitymanager, ou to enganado? Quanto a usar varios bancos pelo xml eu nao sabia realmente, vou procurar sobre isso. Mais o x aqui é o entitymanager, pq usa-lo?

Não, você não pode usar o JPA sem o EntityManager :!:

Como um amigo já citou, ele gerencia as entidades, ou seja, os estados das entidades. Então não dá para ter JPA sem o EntityManager.

O padrao JPA nao seria as annotations do javax.persistence ??? Eu ja mapiei usando JPA sem precisar do entitymanager.

É mas como vc vai salvar ou excluir essas entidades que vc mapeou usando JPA sem o EntityManager? :wink:
Não vai fazer muito sentido mapear com JPA e depois pegar uma session nativa do hibernate pra realizar essas operações de crud…

Explicando melhor a EntityManager, ela é análoga a session do Hibernate, na prática serve mais ou menos pra mesma coisa!

É mas como vc vai salvar ou excluir essas entidades que vc mapeou usando JPA sem o EntityManager? :wink:
Não vai fazer muito sentido mapear com JPA e depois pegar uma session nativa do hibernate pra realizar essas operações de crud…

Explicando melhor a EntityManager, ela é análoga a session do Hibernate, na prática serve mais ou menos pra mesma coisa!
[/quote]
Obrigado pela analogia amigo, ajudou bastante,rs.
Abraços.