Grails有很多关系列表,包含空和缺少的条目

时间:2015-03-19 17:14:28

标签: hibernate grails gorm

使用Grails / Terracotta时遇到hasMany(1-M)关系时出现以下问题。我有以下域模型(伪代码):

User {
    String username

    List languages

    static hasMany = [ languages: Language ]

    static mapping = {
        cache true
        languages cache: true, cascade: "all-delete-orphan", lazy: true
    }
}

Language {

    String name

    static belongsTo = [user: User]
}

使用在BootStrap.groovy中注册的编组器将其作为JSON返回:

JSON.registerObjectMarshaller(User) {
    def returnArray = [:]
    returnArray['id'] = it.id
    returnArray['username']
    returnArray['languages'] = it.languages
}


JSON.registerObjectMarshaller(Language) {
        def returnArray = [:]
        returnArray['id'] = it.id
        returnArray['name'] = it.name
}

我们遇到的问题是,使用缓存(Terracotta),我们看到数据库中有多种语言的用户只有一种语言在前端。返回的JSON如下所示:

{
 id: 1
 username: "Test",
 languages: [
     null,
    {"id": 1089,name: "French"}
 ]
}

在此示例中,用户在数据库中有三种语言(所有语言都具有正确的列表索引)但在应用程序中我们看到了上述内容。在重新启动时清除缓存,问题就会消失,但对于其他用户来说,我无法复制该模式。

问题是在什么情况下可能发生这样的事情,其中​​列表不按顺序或缺少hasMany关系的条目。

通过语言搜索用户是一种常见用例。我想知道在这个搜索期间,在条件查询中使用别名的情况下,可能只是在列表中加载匹配语言并缓存它吗?

我无法在dev或qa环境中重现这种行为。

任何指针都会非常感激。

0 个答案:

没有答案