Hibernate 4

Bom dia pessoas,

Estudei a fj21 da Caelum - parte que trata do hibernate - e gostei muito, os exemplos foram muito claros e fáceis de implementar. Porém, reparei que é usado o hibernate 3, e a versão estável mais recente é a 4.
Percebi isto pois meu eclipse acusou que a classe AnnotationConfiguration do Hibernate está depreciada, quando por exemplo, vou configurar uma anotação:

Com isso, sai pesquisando no google alguns tutoriais sobre como fazer o mapeamento com o hibernate 4, e encontrei este link: http://www.roseindia.net/hibernate/hibernate4/firstHibernateApplication.shtml

Mas reparem que este tutorial usa apenas xml - em vez de anotações - para fazer o mapeamento objeto relacional.

Minha dúvida é: está certo isso, o recomendado hoje é usar xml para a configuração do mapeamento objeto relacional? Isso me deixou confuso pois sempre me diziam que anotações vieram para eliminar essas configurações na base do xml. E sempre me pareceu muito mais fácil usar anotações em vez xml.

Gostaria de tirar essa grande dúvida que vem me consumindo desde semana passada. Agradeço desde já, abraços!

Pessoas, encontrei também este exemplo aqui, o qual utiliza EntityManager: http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/

Qual dos dois links que passei faz o uso correto do hibernate? Se ambos o fazem, qual o mais indicado?

Muito obrigado desde já! Abraços!

No segundo link que postei ( http://wehavescience.com/2012/11/03/crud-com-hibernate-4-e-jpa/ ), me parece que foi usado apenas JPA, ou é impressão minha? Pra que o autor pediu pra baixar os jars do hibernate, se elas não são usadas em momento algum do projeto?

Abraços.

Oi $ERVER !

O JPA é uma especificação e o hibernate é uma implementação dessa especificação.
Vc pode utilizar tanto o EntityManager do JPA como o SessionFactory do hibernate.
Depende das suas necessidades.

Boa tarde fdiaz2011 ,

Primeiramente, muito obrigado por dispor do seu tempo pra me ajudar!

Deixa eu ver se entendi então: JPA é API - ou seja, apenas uma interface - enquanto há uma implementação própria do Java - que possui a classe EntityManager - e há também a implementação do hibernate. É isso mesmo?

Abraços.

EntityManager é uma interface, na realidade. Acho que agora entendi, o hibernate implementa essa interface. É isso mesmo?

Abraços.

É +/- isso !

O JPA é uma especificação e as ORM´s (como o hibernate) devem seguir (implementar) as regras dessa especificação.
Como o hibernate é uma implementação da JPA vc pode usar o hibernate utilizando o EntityManager e os métodos do JPA.
Porém vc tb pode utilizar apenas o hibernate caso queira, já q ele tem tudo da JPA.

Algumas pessoas preferem utilizar apenas o hibernate devido a algumas facilidades q tem nele e não tem na JPA.
Como o Criteria, por exemplo, q é muito melhor nele.
Outros preferem utilizar o JPA pq assim vc pode trocar o hibernate por outra ORM (como o Toplink) “sem mudanças” no codigo.

A especificação não é essa aqui: http://download.oracle.com/otndocs/jcp/persistence-2_1-pr-spec/index.html ?

Isso que não estou entendendo, ou é uma especificação ou é uma API. E como tem o nome de Java Persistence API, é uma API. Ou não?

Pelo que andei lendo aqui, me parece que a especificação é o úlitmo link que passei, e a JPA é o que está dentro do pacote javax.persistence, ou seja, segue a JPS - Java Persistence Specification.

UP!

Olá $ERVER. Esse assunto já foi bem discutido em outros tópicos aqui nessa comunidade, mas vamos la.

Digamos que vc tem um documento explicando como fabricar um carro. Esse documento seria a especificação (JPA)
Dai vc pega esse documento e constroi um carro, mas vc acha que aquele carro está muito simples e então coloca mais alguns acessórios nele. JPA+algumas coisas = Hibernate (ou outro framework ORM)
No entanto, vc pode usar o carro sem usar os recursos adicionais, entendeu?
Quanto a sua dúvida sobre o xml eu não sei responder. =)

Olá AndreLuisOnLine,

É ai que o bicho pega: JPA quer dizer Java Persistence API, correto? Veja a definição de API -> http://pt.wikipedia.org/wiki/API . Só com isso já se pode chegar a conclusão de que uma API não pode ser uma especificação.

Pense agora no nosso dia-a-dia: geralmente para construir um software, precisamos dos seus requisitos, que geram a sua especificação, correto? Porém, essa especificação é apenas um documento, e não a implementação. O que me parece que o pessoal confunde é isso mesmo: uma especificação não é algo concreto como software. Quando uma pessoa diz que está usando JPA puro, ela não pode estar usando uma especificação, mas sim as classes do pacote javax.persistence (sendo que isso sim é algo concreto). Tanto que você pode ver a página de download da especificação aqui -> http://download.oracle.com/otndocs/jcp/persistence-2_1-pr-spec/index.html

O que mais deve confundir o pessoal, é que a JPA me parece seguir 100% a JPS (Java Persistence Specification), ai pode-se dizer que um é o outro, quando não é verdade.

[quote]Digamos que vc tem um documento explicando como fabricar um carro. Esse documento seria a especificação (JPA)
Dai vc pega esse documento e constroi um carro, mas vc acha que aquele carro está muito simples e então coloca mais alguns acessórios nele. JPA+algumas coisas = Hibernate (ou outro framework ORM) [/quote]

Tem um erro ai na sua analogia: o carro você usa ferramentas para fabricar (JPA, ou as classes do pacote javax.persistence) a partir da especificação (http://download.oracle.com/otndocs/jcp/persistence-2_1-pr-spec/index.html)

Novamente chegando ao ponto principal do que argumento: uma API não pode ser simplesmente um documento, deve ter algo concreto com que as pessoas possam trabalhar. Tanto que , caso fosse somente uma especificação, não teríamos as classes do pacote javax.persistence, não concorda comigo?

Novamente, vejam o link do próprio site da oracle: http://download.oracle.com/otndocs/jcp/persistence-2_1-pr-spec/index.html

No próprio link tem persistence spec.

UP!

Opa, tô aqui porque usaram o link do meu blog como referência. :stuck_out_tongue:

$ERVER, sim, é isso mesmo, JPA é a especificação do Java para persistência de dados, um conjunto de interfaces falando a grosso modo, e o Hibernate é uma das implementações dessa especificação, além de possuir outros recursos. Ou seja, você pode usar JPA utilizando os jars do Hibernate e se quiser mudar p/ usar a implementação do Spring, você só precisa mudar os jars do Hibernate para o Spring que tudo irá funcionar como deveria.

[]'s