When you use Hibernate and DAO pattern it is a good idea to use a Generic Base Dao. The fallowing code snippet contains GenericDAO that is a base class for all my DAO classes. This GenericDAO uses HibernateDaoSupport from Spring for its implementation if you want you can use JpaDaoSupport or JdbcDaoSupport in your projects. My Generic DAO interface looks like this : package org.joke.myproject.dao.base; import java.io.Serializable; import java.util.List; /** * @author Naiden Gochev * @param <E> * @param <PK> */ public interface GenericDao<E,PK extends Serializable> { PK save(E newInstance); void update(E transientObject); void saveOrUpdate(E transientObject); void delete(E persistentObject); E findById(PK id); List<E> findAll(); List<E> findAllByProperty(String propertyName,Object value); } All method names are very common so I don't