certo e isso ai.
eu so crio o hibernate.cfg.xml
não uso o hibernate.reveng.xml
e nem a HibernateUtil.java
trabalho de outra forma para obter
uma session.
primeiro crio um DAOImpl que implementa a minha intefeice DAO
e depois o crio DAO de cada objeto.
public abstract class DAOImpl implements DAO {
static {
System.out.println("inicializando");
try {
factory = new AnnotationConfiguration().configure()
.addAnnotatedClass(PessoaFisica.class)
.addAnnotatedClass(Funcionario.class)
.addAnnotatedClass(Endereco.class)
.addAnnotatedClass(Pessoa.class)
.addAnnotatedClass(Contato.class)
.buildSessionFactory();
System.out.println("inicializado");
} catch(HibernateException he) {
he.printStackTrace();
}
}
public DAOImpl() {
}
public void open() throws HibernateException{
session = factory.openSession();
transaction = session.beginTransaction();
}
public void close() throws HibernateException{
if (transaction != null) {
transaction.commit();
}
if (session != null) {
session.close();
}
}
public void saveObject(Object o) throws HibernateException {
open();
session.save(o);
close();
}
public void deleteObject(Object o) throws HibernateException {
open();
session.delete(o);
close();
}
public void updateObject(Object o) throws HibernateException {
open();
session.update(o);
close();
}
protected static SessionFactory factory;
protected Session session;
protected Transaction transaction;
}
ai um exemplo do objeto de DAO(Data access Object) da entidade Funcionario
que herda de DAOImpl e implementa a intefeice FuncionarioDAO.
public class FuncionarioDAOImpl extends DAOImpl implements FuncionarioDAO{
public void save(Funcionario f) throws HibernateException {
saveObject(f);
}
public void delete(Funcionario f) throws HibernateException {
deleteObject(f);
}
public void update(Funcionario f) throws HibernateException {
updateObject(f);
}
public List<Funcionario> findAll() throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
public List<Funcionario> findByIdFuncionario(Integer idFuncionario) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.add(Restrictions.eq("idPessoa", idFuncionario));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
public List<Funcionario> findByNome(String nome) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.add(Restrictions.like("nome", nome));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
public List<Funcionario> findByBairro(String bairro) throws HibernateException {
return like0("bairro",bairro);
}
public List<Funcionario> findByTelefone(String telefone) throws HibernateException {
return like1("telefone",telefone);
}
public List<Funcionario> findByCelular(String celular) throws HibernateException {
return like1("celular",celular);
}
public List<Funcionario> findByRua(String rua) throws HibernateException {
return like0("rua",rua);
}
private List<Funcionario> like0(String propriedade,Object value) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.createCriteria("endereco")
.add(Restrictions.like(propriedade, value));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
private List<Funcionario> like1(String propriedade, Object value) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.createCriteria("contato")
.add(Restrictions.like(propriedade, value));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
}
ai o codigo das intefeices DAO e FuncionarioDAO.
public interface DAO {
public abstract void open() throws HibernateException;
public abstract void close() throws HibernateException;
public abstract void saveObject(Object o) throws HibernateException;
public abstract void deleteObject(Object o) throws HibernateException;
public abstract void updateObject(Object o) throws HibernateException;
}
public interface FuncionarioDAO extends DAO{
public abstract void save(Funcionario f) throws HibernateException;
public abstract void delete(Funcionario f) throws HibernateException;
public abstract void update(Funcionario f) throws HibernateException;
public abstract List<Funcionario> findAll() throws HibernateException;
public abstract List<Funcionario> findByIdFuncionario(Integer idFuncionario) throws HibernateException;
public abstract List<Funcionario> findByNome(String nome) throws HibernateException;
public abstract List<Funcionario> findByBairro(String bairro) throws HibernateException;
public abstract List<Funcionario> findByTelefone(String telefone) throws HibernateException;
public abstract List<Funcionario> findByCelular(String celular) throws HibernateException;
public abstract List<Funcionario> findByRua(String rua) throws HibernateException;
}