编写DAO:如何在抽象类中覆盖或实现接口方法?

时间:2014-02-08 22:21:20

标签: java spring hibernate

我正在使用Spring 3.2和Hibernate 4.我正在用dao编写持久层访问。这是dao接口代码:

public interface AbstractDao<E, I extends Serializable> {

    public E findById(I id);
    public void saveOrUpdate(E e);
    public void delete(E e);
    public List<E> findByCriteria(Criterion criterion);
}

在我编写了实现接口的抽象类之后:

public abstract class AbstractDaoImpl<E, I extends Serializable> implements AbstractDao<E,I> {

        private Class<E> entityClass;

        protected AbstractDaoImpl(Class<E> entityClass) {
            this.entityClass = entityClass;
        }

        @Autowired
        private SessionFactory sessionFactory;

        public Session getCurrentSession() {
            return sessionFactory.getCurrentSession();
        }

        @Override
        public E findById(I id) {
            return (E) getCurrentSession().get(entityClass, id);
        }

        @Override
        public void saveOrUpdate(E e) {
            getCurrentSession().saveOrUpdate(e);
        }

        @Override
        public void delete(E e) {
            getCurrentSession().delete(e);
        }

        @Override
        public List<E> findByCriteria(Criterion criterion) {
            Criteria criteria = getCurrentSession().createCriteria(entityClass);
            criteria.add(criterion);
            return criteria.list();
        }
}

我在抽象类中实现的所有方法都遇到了一些编译错误:findById(I id)saveOrUpdate(E e)delete(E e)findByCriteria(Criterion criterion)

错误消息是:

  

此行有多个标记   
- 实现com.startup.app.models.hibernate.dao.AbstractDao.findById   
- 类型AbstractDaoImpl的方法findById(I)必须覆盖超类        方法

有什么不对,我不明白。谢谢。 enter image description here

1 个答案:

答案 0 :(得分:1)

确保您至少使用 Java 1.6 ,以便在这种情况下使用@Override

在Java 1.5中,@Override只能应用于覆盖超类方法的方法。