Tenho uma aplicação desktop, e preciso gravar informações de uma JTable, além de algumas matrizes de objetos, e informações de configuração do programa.
Estive lendo muito sobre JPA, EJB e Hibernate, mas ainda não consegui definir qual o melhor para minha situação… preciso de um que não demore muito para aprender e que eu possa salvar de uma maneira flexível, quero dizer, que eu possa modificar a classe e conseguir abrir o arquivo que eu salvei antes de modificar a classe do programa, da maneira mais simples possível.
A aplicação é em J2SE, não sei muito bem as diferenças para J2EE.
Estou sozinho neste projeto, portanto posso realizar qualquer alteração.
Qual usar? JPA/EJB, ou Hibernate?
9 Respostas
Hibernate é uma implementação da JPA.
Recomendo.
Eu não sei exatamente qual os requisitos do seu sistema, mas pelo pouco que você colocou aqui, EJB está fora de questão.
A dúvida na verdade ficaria entre HIbernate e JDBC.
Pelo que eu entendi, é um sistema bem simples, com poucas entidades e que acho que JDBC puro resolveria bem o problema (ainda mais pq ele é o mais simples e padrão de se aprender).
Dê um olhada em JDBC e depois olhe em Hibernate, ai você terá uma boa base para escolher entre eles.
Se for o caso escolher entre Hibernate e JDBC, fico com Hibernate.
Só não gostei de uma coisa q li, dizendo q no Hibernate não é possível inserir multiplos objetos em uma unica query, tenho que fazer várias. Achei estranho e chato…
Mas as vantagens superam, e a complexidade é um pouco maior do que descrevi, preciso de várias tabelas, vou fazer buscas, substituições…
Mas EJB também pareceu interessante… é muito complexo? Se for acho q vou ficar com hibernate mesmo.
Se for o caso escolher entre Hibernate e JDBC, fico com Hibernate.
Só não gostei de uma coisa q li, dizendo q no Hibernate não é possível inserir multiplos objetos em uma unica query, tenho que fazer várias. Achei estranho e chato…
Mas as vantagens superam, e a complexidade é um pouco maior do que descrevi, preciso de várias tabelas, vou fazer buscas, substituições…
Já que você optou por Hibernate (excelente), acho que você deve olhar a integração dele com o Spring, principalmente sobre o módulo de Transaction e o template para Hibernate. Utilizando esse template, você não precisa fazer multiplos insert, o próprio template faz para voce :).
Sobre EJB, um resumo seria que ele é uma especificação para criar componentes para aplicações enterprise. Ele precisa de um servidor de aplicação JEE para rodar, então no seu caso de aplicação desktop, ela precisaria se comunicar com um servidor JEE (seja através de HTTP, RMI, whatever).
O EJB é basicamente dividido entre a versão 2 e 3. A versão 2, utilizada na especificação J2EE, é mais antiga e com vários problemas, desde de alto acoplamento, como a necessidade de várias camadas para fazer coisas simples.
A versão 3, atualmente no JEE, utiliza o JPA como camada de Entidade. Ou seja, se você for usar EJB para persistir dados no banco você estará utilizando JPA.
Uma das coisas mais legais do JPA é que você não precisa de EJB para utilizá-lo. Você pode simplesmente pode utilizar a especificação JPA através de algum outro vendor, no caso, o próprio Hibernate implementa a especificação JPA (olhe sobre Hibernate Annotations e Hibernate EntityManager).
Cuidado apenas para não começar a por um caminhão de frameworks, fazer um verdadeiro frankstein para uma aplicação simples, porque ao invés de ajudar, os frameworks irão te dar um grande trabalho.
Novamento dizendo, eu acho valiozo você dar um olhada no Hibernate (e Hibernate Annotations) e na sua integração com o Spring.
Espero ter ajudado
Só confirmando, caso eu salve os objetos com o Hibernate, depois eu inclua ou remova atributos ou métodos da classe, após essas modificações minha aplicação conseguirá ainda abrir os objetos salvos pelo Hibernate na aplicação antiga? E os atributos que não existirem mais serão inicializados com o valor default?
Sim, sem problema algum. O que eu geralmente faço é o seguinte, quando eu crio um campo novo no banco e no hibernate, no banco eu já seto o seu valor DEFAULT.
Mas tem um detalhe, eu não vou usar essa aplicação apenas aqui com acesso a um banco de dados. A idéia que as informações serão salvas em um arquivo, por cada usuário, como se fosse um .doc do word. Nesse caso, eu não vou ter acesso ao que o usuário gravou, até ele abrir minha aplicação e clicar em “abrir arquivo”.
Você pode usar Hibernate para esse caso sem problemas. Quando a pessoa for “importar” os dados locais para o banco, você simplesmente irá popular os objetos Java e dar um save através do Hibernate.
Na revista Mundo Java (nao lembro qual edição) saiu um exemplo com o Hibernate para fazer vários inserts seguidos com ele de forma rápida. Dê uma pesquisada na web que certamente você irá encontrar algo