mongodb - 使用 GORM MongoDB 插件实现接口(interface)的持久类

标签 mongodb grails interface persistence grails-orm

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

class Scraper {

    //some code

    Paginator paginator

    //more code

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

然后是 paginator 接口(interface)的具体实现,比如说 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)进行实现......这非常好,因为我假设它与分页器接口(interface)有关。

感谢您的任何回复...

最佳答案

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

  • 与任何 JavaBean 一样,您的持久类必须具有一个公共(public)的无参数构造函数,通过添加一个采用您的接口(interface)的构造函数,您不再提供一个
  • 您的 Scraper 类需要将“Paginator”标记为 transient ,以告诉持久性引擎不要尝试保留“paginator”属性。由于这是一个自定义接口(interface),它不会知道如何持久化它。
  • 关于mongodb - 使用 GORM MongoDB 插件实现接口(interface)的持久类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13554376/

    相关文章:

    javascript - 使用聚合框架或 MapReduce 将事件数据中的文档嵌入到 MongoDB 中

    mongodb - PyMongo - 使用 connect=False 创建 MongoClient,或者在 fork 后创建客户端

    python - 如何在 python 中为包含嵌套文档列表的文档创建 mongoDB 聚合查询?

    arrays - MongoDB 未正确查询给定位置数组内的 `null`

    java - 接口(interface)中需要私有(private)静态方法 - Java 9

    grails - 在HQL查询中执行加/减?

    grails - Rabbitmq:手动创建的用户无法正常工作

    unit-testing - 我应该在哪里存储grails单元测试使用的示例xml文件?

    java - 当在两台不同的机器上创建RMI应用程序时客户端和服务器我们应该在哪里定义我们的接口(interface)客户端或服务器端?

    language-agnostic - 接口(interface)与公共(public)类成员