Grails + 斯波克 : NullPointerException when doing addTo* on an embedded hasMany field

标签 grails grails-orm grails-2.0 spock

我有域类:

class MarketCommoditiesConfiguration extends MarketConfiguration {

    static mapWith = "mongo"

    static hasMany = ['commodities': Commodity]

    static embedded = ['commodities']

    ...

addToCommodities 之后执行 save 会引发以下异常。

|  java.lang.NullPointerException
    at org.grails.datastore.mapping.model.types.Association.getInverseSide(Association.java:71)
    at org.grails.datastore.mapping.engine.NativeEntryEntityPersister.handleEmbeddedInstance(NativeEntryEntityPersister.java:1254)
    at org.grails.datastore.mapping.engine.NativeEntryEntityPersister.handleEmbeddedInstance(NativeEntryEntityPersister.java:1215)
    at org.grails.datastore.mapping.engine.NativeEntryEntityPersister.handleEmbeddedToMany(NativeEntryEntityPersister.java:1188)
    at org.grails.datastore.mapping.engine.NativeEntryEntityPersister.persistEntity(NativeEntryEntityPersister.java:1077)
    at org.grails.datastore.mapping.engine.NativeEntryEntityPersister.persistEntity(NativeEntryEntityPersister.java:1138)
    at org.grails.datastore.mapping.engine.EntityPersister.persist(EntityPersister.java:160)
    at org.grails.datastore.mapping.core.AbstractSession.persist(AbstractSession.java:522)
    at org.grails.datastore.gorm.GormInstanceApi.doSave(GormInstanceApi.groovy:194)
    at org.grails.datastore.gorm.GormInstanceApi.save_closure5(GormInstanceApi.groovy:162)
    at org.grails.datastore.mapping.core.DatastoreUtils.execute(DatastoreUtils.java:302)
    at org.grails.datastore.gorm.AbstractDatastoreApi.execute(AbstractDatastoreApi.groovy:37)
    at org.grails.datastore.gorm.GormInstanceApi.save(GormInstanceApi.groovy:161)
    at com.apposit.terra.connect.service.MarketService.addCommodityToMarket(MarketService.groovy:248)
    at com.apposit.terra.connect.service.MarketServiceSpec.Test addCommodityToMarket creates a new next month configuration if current month's configuration doesn't exist(MarketServiceSpec.groovy:164)

最佳答案

Keyword放入@Mock注释中解决了这个问题。 http://grails.1312388.n4.nabble.com/Grails-MongoDb-embedded-collection-causes-nullpointerexception-td4644098.html包含更多涉及的讨论。

I know this is super-old, but a Google search led me here whilst facing the same issue. Make sure that you have added @Mock(User) to your unit test class. In my case, I had multiple levels of embedded domain classes, and each of them had to be mocked. - clarkdustin

关于Grails + 斯波克 : NullPointerException when doing addTo* on an embedded hasMany field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31511396/

相关文章:

grails - 将 Grails 域类设置为 "No-Insert Mode"

grails - grails 2.0-建议使用Jetty 7或Jetty 8?

grails - 从Grails 1.3.7升级到2.0后执行 Bootstrap 时出错

twitter-bootstrap - 在 Grails 3 应用程序中引用 Bootstrap 的最佳方式

rest - 使用Restful-API插件上传Grails文件

grails - 在集成测试中获取服务器 URL?

mysql - 俄语字符被存储为 ????在 mysql 中,在 grails 应用程序中

hibernate - 带有 PostgreSQL 的 Grails 不生成表

email - 如何覆盖 config.groovy 中定义的 SMTP 配置的现有发件人地址

java - 无法解决对自制模块的依赖关系