持久化实现GORM MongoDB插件接口的类

时间:2012-11-25 19:02:17

标签: mongodb grails interface persistence gorm

我在坚持上课时遇到了问题。我有一个名为Scraper的类,它使用一个名为Paginator的接口。 Paginator接口有几种实现,它们将在运行时实例化。所以结构看起来像这样:

class Scraper {

    //some code

    Paginator paginator

    //more code

    def Scraper(Paginator paginator){
        this.paginator = paginator
    }
}

然后有paginator接口的具体实现让我们说paginatorA和paginatorB。所以现在我想尝试做以下事情:

PaginatorA p = new PaginatorA()
Scraper s = new Scaper(p)

s.save(flush:true)

......它得到的是:

Error Error executing script TestApp:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name     'mongoDatastore': Cannot resolve reference to bean 'mongoMappingContext' while setting bean property 'mappingContext';
nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mongoMappingContext': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException (Use --stacktrace to see the full trace)

有谁能告诉我该怎么做?我想它与Mapper有关,因为它不知道使用哪个具体的Paginator或如何坚持它?如果是这种情况那么我怎么能告诉框架该怎么做?我试着想出几个小时的解决方案而且非常沮丧,所以任何帮助都会非常感激。

哦,顺便说一下,我也尝试过针对具体的实现(PaginatorA)...这完全正常,因为我假设它与paginator接口有关。

感谢您的回复...

1 个答案:

答案 0 :(得分:2)

错误很糟糕,你应该为此提出一个JIRA问题,但从根本上说,我可以看到代码有两个问题:

  1. 您的持久化类必须具有任何JavaBean的公共no-args构造函数,方法是添加一个带有您的接口的构造函数,您不再提供一个

  2. 你的Scraper类需要将'Paginator'标记为瞬态,以告诉持久性引擎不要试图保持'paginator'属性。由于这是一个自定义界面,因此不知道如何保留它。