Hibernate Generic Dao

时间:2015-09-06 10:10:47

标签: java spring hibernate generics

我想编写抽象类,它将包含使用db的所有通用方法,如save,update等。然后创建尽可能多的DAO我需要的实现,并且,如果需要,覆盖/添加方法。

public interface Dao<T, ID extends Serializable> {

    void save(T t);

    T get(ID id);

    void update(T t);

    void remove(T t);

    List<T> findAll();
}

@Repository
@Transactional
public abstract class AbstractDao<T, ID extends Serializable> implements Dao<T, ID> {
    @Autowired
    private SessionFactory sessionFactory;

    private Class<T> clazz;

    public AbstractDao(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void save(T t) {
        sessionFactory.getCurrentSession().save(t);
    }

    public T get(ID id) {
        return sessionFactory.getCurrentSession().get(clazz, id);
    }

    public void update(T t) {
        sessionFactory.getCurrentSession().update(t);
    }

    public void remove(T t) {
        sessionFactory.getCurrentSession().delete(t);
    }

    public List<T> findAll() {
        return sessionFactory.getCurrentSession().createCriteria(clazz).list();
    }
}

@Repository
@Transactional
public class UserDao extends AbstractDao<User, Integer> {
    public UserDao() {
        super(User.class);
    }
}

public class MainTest {
        @Test
        public void testName() throws Exception {
            ApplicationContext ctx = new AnnotationConfigApplicationContext(HibernateConfig.class);
            UserDao userDao = ctx.getBean(UserDao.class);

            ...
        }
    }

我收到了这个错误:

No qualifying bean of type [com.sevak-avet.UserDao] is defined

如果我不使用AbstractDao类并直接在UserDao中实现所有方法,那么它可以工作。我做错了什么?

0 个答案:

没有答案