Hibernate - Conectar no banco - Como fazer?

Olá Pessoal,
estou com uma dúvida aki sobre como acessar o banco de dados e criar a factory utilizando o hibernate.
então já vi que é possivel conectar e indicar as classes a serem persistidas atraves :

  1. via xml(arquivo hibernate.cfg.xml ou hibernate.properties);
    2 via classe, utilizando o AnnotationConfiguration e setando as propriedades
    ou
  2. Criar o entityManger do JPA(EJB3).

Já decidi que vou mapear meus objetos com o annotation do JPA.
Agora qual dessas 3 opções devo usar para conectar e criar meus pojos.
estou iniciando nessa parte agora e devo fazer toda a arquitetura para o acesso ao banco.
se vcs puderem me ajudar agradeço

vlw galera.
Jonathan Martinez

Bom é um seguinte…

No pacote de codigo-fonte vc tera o hibernate.properties e o log4j.properties
hibernate.properties

Descomenta  somente o que vc ira usar exemplo:

## PostgreSQL

hibernate.dialect org.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class org.postgresql.Driver
hibernate.connection.url jdbc:postgresql://localhost:5432/banco
hibernate.connection.username postgres
hibernate.connection.password postgres

log4j.properties não mexe em nada

Cria uma pasta chamada hibernate onde tera as suas classes

hibernateFactory

package hibernate;

/**
 *
 * @author Diogo
 */

import cliente.bean.Cliente;
import conta.bean.Conta;
import endereco.bean.Endereco;
import fornecedor.bean.Fornecedor;
import funcionario.bean.Funcionario;
import pessoafisica.bean.Pessoafisica;
import pessoajuridica.bean.Pessoajuridica;
import produto.bean.Produto;
import telefone.bean.Telefone;
import usuario.bean.Usuario;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import produto.bean.Produtosfornecidos;


public class HibernateFactory {

    private static SessionFactory factory;

    static {
        AnnotationConfiguration cfg = new AnnotationConfiguration();
        
        cfg.addAnnotatedClass(Conta.class);
        cfg.addAnnotatedClass(Cliente.class);
        cfg.addAnnotatedClass(Endereco.class);
        cfg.addAnnotatedClass(Fornecedor.class);
        cfg.addAnnotatedClass(Funcionario.class);
        cfg.addAnnotatedClass(Pessoafisica.class);
        cfg.addAnnotatedClass(Pessoajuridica.class);
        cfg.addAnnotatedClass(Produto.class);
        cfg.addAnnotatedClass(Produtosfornecidos.class);
        cfg.addAnnotatedClass(Telefone.class);
        cfg.addAnnotatedClass(Usuario.class);        
        
        factory = cfg.buildSessionFactory();
     }
    
    public static Session getSession() {
        return factory.openSession();
    }
    
}

E outra chamada Persistencia.java

package hibernate;

import conta.bean.Conta;
import java.io.Serializable;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Expression;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author Diogo
 */


public class PersistenciaDAO {                               
    
    public PersistenciaDAO(){
        
    }
                
    public void salvar(Object object) throws Exception{
       
       Session session = HibernateFactory.getSession();
       Transaction transaction = session.beginTransaction();
       try{        
       
       session.saveOrUpdate(object);
       session.flush();
       transaction.commit();
       }finally{
         session.close();    
       }
    }
        
    public void deletar(Object object) throws Exception{               
       Session session = HibernateFactory.getSession();
       Transaction transaction = session.beginTransaction();
                            
       session.delete(object);
       session.flush();
       transaction.commit();
       session.close();
        
    }   
    
    public void removeByName(String name, Class clazz) {  
        
        Session session = HibernateFactory.getSession();
        Transaction transaction = session.beginTransaction();
        
        Criteria c = session.createCriteria(clazz);  
        c.add(Restrictions.eq("nome", name));  
                      
        session.delete(c.uniqueResult()); 
        session.flush();
        transaction.commit();  
        session.close();
    }  

        public void removeByCodigo(String codigo, Class clazz) {  
        
        Session session = HibernateFactory.getSession();
        Transaction transaction = session.beginTransaction();
        
        Criteria c = session.createCriteria(clazz);  
        c.add(Restrictions.eq("codigo", codigo));  
                      
        session.delete(c.uniqueResult()); 
        session.flush();
        transaction.commit();  
        session.close();
    }  
        
    public Object buscar(Class clazz,Integer pk) throws Exception  {             
        Session session = HibernateFactory.getSession();
        Transaction transaction = session.beginTransaction();    
        try {          
          Serializable obj = (Serializable) session.get(clazz, pk );  
          session.flush();  
          transaction.commit();  
          return  obj;  
     } finally {  
          session.close();  
     }
   }
    
    public Conta buscarByCodigo(Conta conta) throws Exception{                
        Session session = HibernateFactory.getSession();
        Transaction transaction = session.beginTransaction();    
        Criteria criteria = session.createCriteria(Conta.class);
        criteria.add(Expression.eq("conta.codigo", conta.getCodigo()));
        
        return (Conta) criteria.list();  
    }
}

Apos isso será nescessario mapear seu bean

@Entity
@Table(name = "cliente")
public class Cliente implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    @Id
   @GeneratedValue(strategy=GenerationType.SEQUENCE)
    @Column(name = "idcliente", nullable = false)
    private Long idcliente;
    
    @Column(name = "ramodeatividade", nullable = false)
    private String ramodeatividade;
    
    @JoinColumn(name = "idconta", referencedColumnName = "idconta")
    @ManyToOne
    private Conta idconta;

Espero ter te ajudado…