Consegui dar uma melhorada no codigo:
meu GenericDAO:
import java.io.Serializable;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Example;
import org.hibernate.criterion.MatchMode;
public abstract class GenericDAO<T> implements Serializable {
private static final long serialVersionUID = -4267978367898190996L;
private static SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
private Class<T> entityClass;
public GenericDAO(Class<T> entityClass) {
this.entityClass = entityClass;
}
public Session getSession() {
Session session = threadLocal.get();
if (session == null) {
session = sessionFactory.openSession();
threadLocal.set(session);
}
return session;
}
public void beginTransaction() {
getSession().beginTransaction();
}
public void commit() {
getSession().getTransaction().commit();
}
public void rollBack() {
getSession().getTransaction().rollback();
}
public void closeSession() {
getSession().close();
}
public void save(T entity) {
getSession().saveOrUpdate(entity);
}
public void delete(T entity) {
getSession().delete(entity);
}
@SuppressWarnings("unchecked")
public List<T> findAll() {
Criteria criteria = getSession().createCriteria(entityClass);
criteria.setMaxResults(500);
return criteria.list();
}
@SuppressWarnings("unchecked")
public T findById(int entityID) {
return (T) getSession().get(entityClass, entityID);
}
@SuppressWarnings("unchecked")
public List<T> findByExample(T filtro, MatchMode matchMode, boolean ignoreCase){
Example example = Example.create(filtro);
if(matchMode != null){
example = example.enableLike(matchMode);
}
if(ignoreCase){
example = example.ignoreCase();
}
return getSession().createCriteria(entityClass).add(example).list();
}
}
meu hibernate util:
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
private static final SessionFactory sessionFactory;
static {
try {
// Create the SessionFactory from hibernate.cfg.xml
sessionFactory = new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
Minha clase DepartamentoDAO herdando minha classe gerenerica:
public class DepartamentoDAO extends GenericDAO {
public DepartamentoDAO(Class entityClass) {
super(entityClass);
// TODO Auto-generated constructor stub
}
public int save(Departamento depart) {
Session session = null;
Integer idDepartamento = 0;
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
try {
session = sessionFactory.openSession();
Transaction transaction = session.beginTransaction();
session.save(depart);
transaction.commit();
}
catch(HibernateException e){
e.printStackTrace();
}finally {
if(session != null) {
session.close();
}
}
return idDepartamento;
}
public List<Departamento> getDepartamentos(){
List<Departamento> listaDepart = null;
Session session = null;
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
try {
session = sessionFactory.openSession();
CriteriaBuilder builder = session.getCriteriaBuilder();
CriteriaQuery<Departamento> criteriaQuery = builder.createQuery(Departamento.class);
criteriaQuery.from(Departamento.class);
listaDepart = session.createQuery(criteriaQuery).getResultList();
}
catch(HibernateException e){
e.printStackTrace();
}finally {
if(session != null) {
session.close();
}
}
return listaDepart;
}
}
meu main:
public static void main(String[] args) {
Departamento depart = new Departamento();
GenericDAO abs = new DepartamentoDAO(Departamento.class);
abs.beginTransaction();
abs.save(depart);
abs.commit();
List<Departamento> departx = abs.findAll();
System.out.println(departx);
}
meu metodo de salvar funciona normalmente, mas o meu metodo de pegar a lista não.
Stack trace:
Hibernate: select this_.codDepart as codDepar1_0_0_, this_.nome as nome2_0_0_ from departamento this_ limit ?
Hibernate: select funcionari0_.departamento_codDepart as departa13_1_0_, funcionari0_.codFuncionario as codFunci2_1_0_, funcionari0_.codFuncionario as codFunci2_1_1_, funcionari0_.cpf as cpf3_1_1_, funcionari0_.dataEntrada as dataEntr4_1_1_, funcionari0_.dataNascimento as dataNasc5_1_1_, funcionari0_.dataSaida as dataSaid6_1_1_, funcionari0_.departamento_codDepart as departa13_1_1_, funcionari0_.matricula as matricul7_1_1_, funcionari0_.nome as nome8_1_1_, funcionari0_.rg as rg9_1_1_, funcionari0_.salario as salario10_1_1_, funcionari0_.senha as senha11_1_1_, funcionari0_.usuario as usuario12_1_1_ from funconarios funcionari0_ where funcionari0_.departamento_codDepart=?
Hibernate: select funcionari0_.departamento_codDepart as departa13_1_0_, funcionari0_.codFuncionario as codFunci2_1_0_, funcionari0_.codFuncionario as codFunci2_1_1_, funcionari0_.cpf as cpf3_1_1_, funcionari0_.dataEntrada as dataEntr4_1_1_, funcionari0_.dataNascimento as dataNasc5_1_1_, funcionari0_.dataSaida as dataSaid6_1_1_, funcionari0_.departamento_codDepart as departa13_1_1_, funcionari0_.matricula as matricul7_1_1_, funcionari0_.nome as nome8_1_1_, funcionari0_.rg as rg9_1_1_, funcionari0_.salario as salario10_1_1_, funcionari0_.senha as senha11_1_1_, funcionari0_.usuario as usuario12_1_1_ from funconarios funcionari0_ where funcionari0_.departamento_codDepart=?
Exception in thread "main" org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: : model.Funcionario
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:79)
at org.hibernate.tuple.PojoInstantiator.instantiate(PojoInstantiator.java:105)
at org.hibernate.tuple.entity.AbstractEntityTuplizer.instantiate(AbstractEntityTuplizer.java:673)
at org.hibernate.persister.entity.AbstractEntityPersister.instantiate(AbstractEntityPersister.java:4954)
at org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1721)
at org.hibernate.internal.SessionImpl.instantiate(SessionImpl.java:1705)
at org.hibernate.loader.plan.exec.process.internal.EntityReferenceInitializerImpl.hydrateEntityState(EntityReferenceInitializerImpl.java:219)
at org.hibernate.loader.plan.exec.process.internal.AbstractRowReader.readRow(AbstractRowReader.java:103)
at org.hibernate.loader.plan.exec.process.internal.ResultSetProcessorImpl.extractResults(ResultSetProcessorImpl.java:122)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:122)
at org.hibernate.loader.plan.exec.internal.AbstractLoadPlanBasedLoader.executeLoad(AbstractLoadPlanBasedLoader.java:86)
at org.hibernate.loader.collection.plan.AbstractLoadPlanBasedCollectionInitializer.initialize(AbstractLoadPlanBasedCollectionInitializer.java:87)
at org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister.java:706)
at org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEventListener.java:74)
at org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:2285)
at org.hibernate.collection.internal.AbstractPersistentCollection$4.doWork(AbstractPersistentCollection.java:585)
at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:263)
at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:581)
at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:148)
at org.hibernate.collection.internal.PersistentSet.toString(PersistentSet.java:327)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at model.Departamento.toString(Departamento.java:53)
at java.lang.String.valueOf(String.java:2994)
at java.lang.StringBuilder.append(StringBuilder.java:131)
at java.util.AbstractCollection.toString(AbstractCollection.java:462)
at java.lang.String.valueOf(String.java:2994)
at java.io.PrintStream.println(PrintStream.java:821)
at view.eeee.main(eeee.java:23)