Olá,
Estou começando a aprender um pouco sobre Hibernate, e montei uma classe DAOFactory utilizando generics, procurando fazer algo o mais genérico possível. Este tipo de implementação é bom? A performance da aplicação cai muito com esta abordagem? O que vocês acham?
package com.checklist.dao;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.checklist.util.HibernateUtil;
public class DAOFactory<T> {
private final Session session;
private Transaction transaction;
private Class<T> classe;
@SuppressWarnings("unchecked")
public DAOFactory(T u) {
session = HibernateUtil.getSession();
this.classe = (Class<T>) u.getClass();
}
public void beginTransaction() {
this.transaction = this.session.beginTransaction();
}
private void save(T u) {
this.session.save(u);
}
public void commit() {
this.transaction.commit();
this.transaction = null;
}
public boolean hasTransaction() {
return this.transaction != null;
}
public void rollback() {
this.transaction.rollback();
this.transaction = null;
}
public void close() {
this.session.close();
}
public DAOFactory<T> getGenericDAO() {
try {
return new DAOFactory<T>(this.classe.newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
public void adiciona(T u) {
beginTransaction();
save(u);
commit();
}
public void remove(T u) {
this.session.delete(u);
}
public void atualiza(T u) {
this.session.merge(u);
}
@SuppressWarnings("unchecked")
public List<T> listaTudo() {
return this.session.createCriteria(this.classe).list();
}
@SuppressWarnings("unchecked")
public T procura(Long id) {
return (T) session.load(this.classe, id);
}
}