使用Generic DAO时出现NoSuchMethodError

时间:2014-04-14 20:09:20

标签: java spring mongodb nosuchmethoderror genericdao

我试图在项目中使用GenericDAO:

public class GenericDao<T> {
    ApplicationContext ctx =
            new AnnotationConfigApplicationContext(SpringMongoConfig.class);
    MongoOperations mongoOperation = (MongoOperations) ctx.getBean("mongoTemplate");

    public void save(T t) {
        mongoOperation.save(t);
    }

    public void delete(final T t) {
        mongoOperation.remove(t);
    }
}

子类NoteDAO扩展了GenericDao,不需要覆盖保存/删除方法。但是,当我尝试使用它们时,我得到: java.lang.NoSuchMethodError: com.example.dao.NoteDAO.save(Lcom/example/model/Note;)V

这是我的NoteDAO,它是空的:

public class NoteDAO extends GenericDao<Note> {
    public static Logger LOG = Logger.getLogger(NoteDAO.class);
    public static int counter = 0;
}

为什么它不起作用?

2 个答案:

答案 0 :(得分:0)

该问题的一个可能解决方案是向NoteDAO添加一个无参数构造函数。

答案 1 :(得分:0)

我试图复制你的场景,它对我有用......看看你是否有某种代码:

package com.x.y;

public class GenericDAO<T> {

   public void save(T t) {
       System.out.println("Generic Save");
   }

   public void delete(final T t) {
      System.out.println("Generic Delete");
   }
}

package com.x.y;

public class NoteDAO extends GenericDAO<Note> {

   public void persist(){
      save(new Note());
   }

}

package com.x.y;

public class Client {
   public static void main(String[] args) {
    NoteDAO nDao = new NoteDAO();
    nDao.save(new Note());   
   }
}

因此,当我运行客户端时,它会打印:&#34; Generic Save&#34;。

试着帮助你。