Problema Hibernate e Persistencia

11 respostas
S

E ai pessoal tudo bem?

Estou com um problema, esta dificil de aprender a usar o hibernate e persistencia. Ja li varios tutoriais e tal mas vejo que o negocio nao vai pra frente. Se possivel gostaria que me dessem uma ajuda algo bem explicativa de como configura e se possivel um exemplo porque ta complicado

desde ja agradeco a ajuda

11 Respostas

J

Quais os problemas você está tendo? O que já fez? Tem algum erro especifico?

Se passar essas informações fica mais facil de ajudar.

S

Bom o negocio e que eu estava vendo precisa ter um servidor instalado. Qual seria a finalidade dele pois se precisar por exemplo implantar um programa para um cliente deve tambem instalar um.
Alem disso tem que configura-lo. baixei o hibernate-annotations-3.3.0.GA.zip mas nao sei como configura-lo direito.
Mais alguma coisa que aparecer eu mando.

J

Não é necessario instalar nenhum servidor.

Que tipo de aplicação é a sua, web, desktop? Está usando Hibernate puro ou JPA?

S

Entao quero fazer uma aplicacao desktop pequena usando hibernate e persistencia, mas estou querendo fazer tudo no braco mesmo pra saber como que funciona pois fica dependendo de algum plug-in pode quebrar a pernas em certas situacoes.

J

Você não precisa instalar nada. Acho que aqui mesmo no PJ tem um tutorial de como usar o hibernate, é bem simples, dê uma olhada, se não conseguir coloque as duvidas aqui.

S

Cara to comecando a fica de cara com isso

tipo estou tentando utiliza aquilo que aprendi mas nao esta dando certo

pelo que eu aprende voce cria um dao e suas interfaces depois voce implementa cada uma de acordo com a minha necessidade. ate ai tudo bem consegui fazer tudo certinho criei dao, daofactory, criei a classe devedores que contem id, nome e valor, devedoresdao(interface). o “banco de dados” que estou usando so pra teste eh o access, pretendo usar outro mas como e para aprender estou utilizando. enfim criei o accessdaodevedores que implementado os metodos insert, update, delete e select. Agora quero saber pelo geito que estou fazendo posso usar o hibernate ou vou ter que fazer alguma modificacao?

J

Sim, você pode usar hibernate, seria algo mais ou menos assim:

Não sei se o hibernate suporta o access nativamente, então vou fazer o exemplo com MySQL, mas só muda o arquivo de configuração.

Veja que não tem um dialect para Access:

http://www.hibernate.org/hib_docs/v3/reference/en/html/session-configuration.html#configuration-optional-dialects

Você teria que criar um, ou achar alguma implementação, só ia complicar.

A entidade que será persistida:

package pojo;

public class Cliente {
   private long id;
   private String nome;
   private String email;
   private String telefone;
   //get & set
}

O arquivo de mapeamento (se estiver usando annotations não precisa dele):

Caminho do arquivo: pojo/Cliente.hbm.xml

<hibernate-mapping>
    <class name="pojo.Cliente" table="CLIENTES">
        <id name="id">
            <generator class="native" />
        </id>
        <property name="nome" />
        <property name="email" />
        <property name="telefone" />
    </class>
</hibernate-mapping>

O arquivo de configuração do hibernate:

Caminho: <raiz do codigo>/hibernate.cfg.xml

&lt;hibernate-configuration&gt;
   &lt;session-factory&gt;
      &lt;property name=&quot;connection.driver_class&quot;&gt;org.mysql.jdbc.Driver&lt;/property&gt;
        &lt;property name=&quot;connection.url&quot;&gt;jdbc&#58;mysql&#58;//localhost/banco_teste&lt;/property&gt;
        &lt;property name=&quot;connection.username&quot;&gt;usuario_banco&lt;/property&gt;
        &lt;property name=&quot;connection.password&quot;&gt;senha_banco&lt;/property&gt;

        &lt;property name=&quot;dialect&quot;&gt;org.hibernate.dialect.MySQLDialect&lt;/property&gt;
        &lt;mapping resource=&quot;pojo/Cliente.hbm.xml&quot;/&gt;
    &lt;/session-factory&gt;
&lt;/hibernate-configuration&gt;

O DAO:

public interface ClienteDao &#123;
   public void insert&#40;Cliente cli&#41;;
   public Cliente findById&#40;long id&#41;;
   //outros metodos
&#125;

Implementação do DAO para hibernate:

public class ClienteDaoHibernate implements ClienteDao &#123;
   private SessionFactory sessionFactory;

   public void insert&#40;Cliente cli&#41; &#123;
      try&#123;
         Session session = sessionFactory.getCurrentSession&#40;&#41;;
         session.save&#40;cli&#41;;
         session.close&#40;&#41;;
      &#125;catch&#40;HibernateException he&#41;&#123;
         he.printStackTrace&#40;&#41;;
         //tratar direito &#58;P
      &#125;
   &#125;

   public Cliente findById&#40;long id&#41;&#123;
      Cliente cli = null;
      try&#123;
         Session session = sessionFactory.getCurrentSession&#40;&#41;;
         cli = &#40;Cliente&#41; session.get&#40;Cliente.class, cli&#41;;
         session.close&#40;&#41;;
      &#125;catch&#40;HibernateException he&#41;&#123;
         he.printStackTrace&#40;&#41;;
      &#125;
      return cli;   
   &#125;
&#125;

E o DAO Factory:

public class DaoFactory &#123;
   private static DaoFactory instance = new DaoFactory&#40;&#41;;
   
   private SessionFactory sf;

   private DaoFactory&#40;&#41;&#123;
      try&#123;
         sf = new Configuration&#40;&#41;.configure&#40;&#41;.buildSessionFactory&#40;&#41;;
      &#125; catch&#40; HibernateException he&#41;&#123;
         he.printStackTrace&#40;&#41;;
      &#125;
   &#125;

   public static DaoFactory getInstance&#40;&#41;&#123;
      return instance;
   &#125;

   public ClienteDao makeClienteDao&#40;&#41;&#123;
      return new ClienteDaoHibernate&#40;sf&#41;;
   &#125;
&#125;

Na hora de usar:

Cliente cli = new Cliente&#40;&#41;;
cli.setNome&#40;&quot;Jair&quot;&#41;;
cli.setEmail&#40;&quot;[email removido]&quot;&#41;;
cli.setTelefone&#40;&quot;&#40;31&#41; 555-1234&quot;&#41;;

ClienteDao cdao = DaoFactory.getInstance&#40;&#41;.makeClienteDao&#40;&#41;;

cdao.insert&#40;cli&#41;;

Digitei esse codigo direito aqui, sem testar, por isso deve ter varios erros, mas já serve de base.
E logico que esse codigo é bem basico, há muitas coisas que podem ser melhoradas, como o uso de um dao generico, com generics, o tratamento de exceções que está bem ruim, o dao factory que pode ser substituido por injeção de dependencias, ou pelo menos bastante melhorado, etc, etc...

Mas como você está começando, já serve pra você ver como funciona.

S

Entao se eu quiser troca de banco de dados e so modifica o hibernate.cfg.xml ?
eu estava aprendendo um outro metodo na faculdade so que por motivo internos nao pude aprender hibernate agora estou eu aqui batalhando pra aprender.

agora uma coisa, voce usa o mysql ou outro banco de dados? meu professor estava querendo passa sobre o postgree agora nao sei pois preciso usar um bom pois tenho uma tabela que sera inserida muito dados e agora nao sei!!

J

Sim, para mudar de banco é só alterar o hibernate.cfg.xml.

E o PostgreSQL é um dos melhores bancos de dados do mercado, o MySQL tambem é muito bom, mas o PostgreSQL é mais robusto, o MySQL só é mais simples, por isso usei ele como exemplo.

S

Cara ate agora nao consigo enteder pois cada hora que procuro alguma informacao encontro coisas diferente.

Ja to comecando a pira por causa disso. Quero conseguir faze um programa pra poder gerencia so as pessoas que marcao aqui na lan que trabalho ate o final do mes pois nao quero voltar a estudar sem entender.

Ja vi um exemplo que o cara fazia um arquivo xml pra cada arquivo class que ele criava sem contar que alguns tinhaum rotulacao. Cada vez que procuro saber mais confuso fico. vai ser uma vitoria se isso funcionar mas pelo visto nao estou nem perto de conseguir.

Bom acho que vou entrega as bets por enquanto pra tentar me acalmar.

obrigado para aqueles que tentaram ajudar.

abraco

S

Pois bem como sou uma pessoa meio teimosa funcei nessa coisa e algo descobri como eh q usa o hibernate-annotations eh pra vc mapear na propria classe q vc estah criando e o hibernate code eh pra vc usar o mapeamento xml pelo q entendi. certo eu jah fiz isso soh q continua dando um problema agora na hora d compila ele pra roda fica dando erro do tipo

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.

bom esse arquivo tah lah e o hibernate.cfg.xml tah certo tb
agora serah q fiz alguma besteira!?

Criado 11 de janeiro de 2008
Ultima resposta 10 de fev. de 2008
Respostas 11
Participantes 2