public class AbstractDaoHibernate { // MEMBERS private Class entityClass; private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } public Session getSession() { return sessionFactory.getCurrentSession(); } // CONSTRUCTORS protected AbstractDaoHibernate(Class dataClass) { super(); this.entityClass = dataClass; } // METHODS @SuppressWarnings("unchecked") public T load(Long id) { return (T)getSession().get(entityClass, id); } @SuppressWarnings("unchecked") public T loadChecked(Long id) throws EntityNotFoundException { T persistedObject = load(id); if(persistedObject == null) { throw new EntityNotFoundException(entityClass, id); } return persistedObject; } public void merge(T detachedObject) { getSession().merge( detachedObject ); } public void save(T persistedObject) { getSession().saveOrUpdate( persistedObject ); } public void delete(T persistedObject) { getSession().delete( persistedObject ); } public void delete(Long id) { delete(loadChecked(id)); } }