Hibernate JPA x Hibernate "puro"

Olá colegas,
Por favor, alguns dos colegas sabe dizer qual a vantagem de se usar Hibernate JPA (com persistence.xml annotations etc.) ao invés de Hibernate puro (com hibernate.cgf.xml e mapeamentos em xml), ou vice-versa?
Eu particularmente prefiro HB JPA, mas peguei um projeto que usa Hibernate puro, e estou meio incoformado com isso… nunca gostei do trampo de mapear “na mão” as entidades e tabelas em xml’s…

Acabei de postar sobre isso em outro topico. Tenho pavor do hibernate com annotations, vai virando uma salada sem fim. Terrivel, mas sou excecao pelo visto.

Quanto a JPA, acho até legal a ideia, mas dou meu pescoco a premio se no dia que surgir um substituto para o Hibernate como ORM padrao, boa parte da API nao tiver que ser alterada.

É o seguinte: JPA tem possibilidade de se usar com anotações ou com XML (através do arquivo orm.xml). Acontece que essa última opção é raramente comentado nos tutoriais da internet e quase ninguém ouviu falar.

Hoje em dia não há desculpa pra não usar JPA, a não ser é, claro, aplicações antigas cuja migração não seja simples.

Eu já usei JPA mapeando no orm.xml. Inclusive na certficação que tirei há pouco (SCBCD 5) cai isso. O problema é que aqui o pessoal insiste em usar Hibernate “à moda antiga”, ao invés de usar Hibernate JPA. Por isso gostaria de saber qual a vantagem. Eu particularmente acho que JPA está se tornando um padrão, com base nas aplicações novas que estão sendo desenvolvidas, com annotations ou mapeamento no .xml.
Quero não ter que usar Hibernate “à moda antiga” aqui no trabalho, mas usar Hibernate JPA (com annotations ou .xml), e preciso justificar o motivo pelo qual quero…

[]´s

Sávio Barros
SCJP
SCWCD
SCEA (Part 1)
SCBCD

[quote=saviobarr]Eu já usei JPA mapeando no orm.xml. Inclusive na certficação que tirei há pouco (SCBCD 5) cai isso. O problema é que aqui o pessoal insiste em usar Hibernate “à moda antiga”, ao invés de usar Hibernate JPA. Por isso gostaria de saber qual a vantagem. Eu particularmente acho que JPA está se tornando um padrão, com base nas aplicações novas que estão sendo desenvolvidas, com annotations ou mapeamento no .xml.
Quero não ter que usar Hibernate “à moda antiga” aqui no trabalho, mas usar Hibernate JPA (com annotations ou .xml), e preciso justificar o motivo pelo qual quero…

[]´s

Sávio Barros
SCJP
SCWCD
SCEA (Part 1)
SCBCD[/quote]

O melhor motivo que vejo: Produtividade.

Olá Renato,
Não entendi. Produtividade é um pró ou contra Hibernate JPA ou Hibernate clássico? Ambos oferecem ferramentas de mapeamento… Pode me ajudar a entender sua colocação?
Valeu!
[]'s

[quote=saviobarr]Olá Renato,
Não entendi. Produtividade é um pró ou contra Hibernate JPA ou Hibernate clássico? Ambos oferecem ferramentas de mapeamento… Pode me ajudar a entender sua colocação?
Valeu!
[]'s
[/quote]

Não falo de ferramentas que geram código/mapeamento automaticamente, mas sim da produtividade sem isso… O pró seria do hibernate JPA ou mesmo sem JPA mas com annotations no lugar do xml. Além de ser mais simples, existe o auto-complete das IDEs sem a necessidade de nenhum plugin ou ferramenta extra quando estamos lidando com annotations. Além do javadoc.

[quote=renatocustodio][quote=saviobarr]Olá Renato,
Não entendi. Produtividade é um pró ou contra Hibernate JPA ou Hibernate clássico? Ambos oferecem ferramentas de mapeamento… Pode me ajudar a entender sua colocação?
Valeu!
[]'s
[/quote]

Não falo de ferramentas que geram código/mapeamento automaticamente, mas sim da produtividade sem isso… O pró seria do hibernate JPA ou mesmo sem JPA mas com annotations no lugar do xml. Além de ser mais simples, existe o auto-complete das IDEs sem a necessidade de nenhum plugin ou ferramenta extra quando estamos lidando com annotations. Além do javadoc.[/quote]

Eu uso Hibernate sem JPA e com mapeamento em xml. Como eu disse, acho a ideia do JPA legal e nao tenho nada contra o seu uso no lugar da API do Hibernate diretamente, exceto pelo fato de nao ter criteria. Mas nada impede de usar JPA e a API do hibernate qdo necessario.

A minha encrenca mesmo eh com as annotation (as da persistencia, de modo geral eu gosto de annotations). Ela polui de forma absurda o codigo da classe. Nada melhor do que ela quietinha num xml, facil de criar e dar manutencao com ferramentas como JBOSS tools, por exemplo, e sem incomodar ninguem, nem ter que ficar desviando 10 linhas de anotacoes de persistencia pra achar o metodo que eu quero alterar.

Enfim, questao de opiniao e eu definitivamente faco parte da minoria nesse caso.

[quote=YvGa][quote=renatocustodio][quote=saviobarr]Olá Renato,
Não entendi. Produtividade é um pró ou contra Hibernate JPA ou Hibernate clássico? Ambos oferecem ferramentas de mapeamento… Pode me ajudar a entender sua colocação?
Valeu!
[]'s
[/quote]

Não falo de ferramentas que geram código/mapeamento automaticamente, mas sim da produtividade sem isso… O pró seria do hibernate JPA ou mesmo sem JPA mas com annotations no lugar do xml. Além de ser mais simples, existe o auto-complete das IDEs sem a necessidade de nenhum plugin ou ferramenta extra quando estamos lidando com annotations. Além do javadoc.[/quote]

Eu uso Hibernate sem JPA e com mapeamento em xml. Como eu disse, acho a idéia do JPA legal e nao tenho nada contra o seu uso no lugar da API do Hibernate diretamente, exceto pelo fato de nao ter criteria. Mas nada impede de usar JPA e a API do hibernate qdo necessario.

A minha encrenca mesmo eh com as annotation (as da persistência, de modo geral eu gosto de annotations). Ela polui de forma absurda o codigo da classe. Nada melhor do que ela quetinha num xml, fácil de criar e dar manutencao com ferramentas como JBOSS tools, por exemplo, e sem incomodar ninguem, nem ter que ficar desviando 10 linhas de anotacoes de persistencia pra achar o método que eu quero alterar.

Enfim, questão de opinião e eu definitivamente faco parte da minoria nesse caso.[/quote]

Eu tinha um colega de serviço que compartilhava da mesma opinião sua. A vantagem do xml a moda antiga é que as classes ficam mais limpas… Outra questão a se considerar é se precisar por exemplo usar o jar com os pojos em uma aplicativo jme por exemplo, para realizar comunicação através de um webservice. Nesse caso as annotations iriam atrapalhar um pouco as coisas… Mas ainda prefiro o uso das annotations;.

[quote=YvGa][quote=renatocustodio][quote=saviobarr]Olá Renato,
Não entendi. Produtividade é um pró ou contra Hibernate JPA ou Hibernate clássico? Ambos oferecem ferramentas de mapeamento… Pode me ajudar a entender sua colocação?
Valeu!
[]'s
[/quote]

Não falo de ferramentas que geram código/mapeamento automaticamente, mas sim da produtividade sem isso… O pró seria do hibernate JPA ou mesmo sem JPA mas com annotations no lugar do xml. Além de ser mais simples, existe o auto-complete das IDEs sem a necessidade de nenhum plugin ou ferramenta extra quando estamos lidando com annotations. Além do javadoc.[/quote]

Eu uso Hibernate sem JPA e com mapeamento em xml. Como eu disse, acho a ideia do JPA legal e nao tenho nada contra o seu uso no lugar da API do Hibernate diretamente, exceto pelo fato de nao ter criteria. Mas nada impede de usar JPA e a API do hibernate qdo necessario.

A minha encrenca mesmo eh com as annotation (as da persistencia, de modo geral eu gosto de annotations). Ela polui de forma absurda o codigo da classe. Nada melhor do que ela quietinha num xml, facil de criar e dar manutencao com ferramentas como JBOSS tools, por exemplo, e sem incomodar ninguem, nem ter que ficar desviando 10 linhas de anotacoes de persistencia pra achar o metodo que eu quero alterar.

Enfim, questao de opiniao e eu definitivamente faco parte da minoria nesse caso.[/quote]

Acho que se for só para considerar o uso de Annotation x XMl, acredito que no caso da persistência os metadados estão extremamente atreladas ao código, por isso considero melhor o uso de Annotation, tanto pela facilidade do autoComplete, tanto porque as IDE mostram as opções disponíveis. Além do que, na hora da manutenção, vc não tem que abrir dois documentos diferentes, o XML e o da classe. Já no caso em que os metadados não estão atrelados ao código da classe, como no caso do SwingBean, onde o xml só denota os itens a serem mostrados na GUI. Ou seja, os metadados não estão atrelados ao bean, mas à interface, de forma que para a mesma classe podem existir vários xml´s para diversas interfaces.
Cabe salientar que muitos frameworks estão colocando as Annotations para facilitar mais a programação, então é bom ficarmos atentos para utilizarmos essa tecnologia em nosso favor. Tem uma MundoJava que discute sobre o uso de Annotations e XML, dando dicas práticas de quando usar uma ou outra abordagem, colocando seus prós e contras.

Estou atualmente trabalhando em um projeto que está usando o Hibernate 3 “puro” (sem Annotation).
Eu gosto muito do JPA, mas uma coisa que falta ainda é a API de Criteria. Desenvolver queries dinamicas sem criteria é um tiro no pé (principalmente para dar manutenção).