grails - Grails:查询hasMany关联

标签 grails gorm

我知道关于这个问题有几个问题,但是似乎没有一个对我有用。我有一个带有以下Domain对象的Grails应用程序:

class Tag {
    String name
}

class SystemTag extends Tag {
    // Will have additional properties here...just placeholder for now
}

class Location {
    String name
    Set<Tag> tags = []
    static hasMany = [tags: Tag]
}

我正在尝试查询已被1个或多个标签标记的所有Location对象:
class LocationQueryTests {

    @Test
    public void testTagsQuery() {
        def tag = new SystemTag(name: "My Locations").save(failOnError: true)
        def locationNames = ["L1","L2","L3","L4","L5"]
        def locations = []
        locationNames.each {
            locations << new Location(name: it).save(failOnError: true)
        }
        (2..4).each {
            locations[it].tags << tag
            locations[it].save(failOnError: true)
        }

        def results = Location.withCriteria {
            tags {
                'in'('name', [tag.name])
            }
        }

        assertEquals(3, results.size())     // Returning 0 results
    }
}

我已验证是否正确创建/设置了数据... 5创建了位置对象,并标记了它们的最后3个。

我看不到上面的查询出了什么问题。我真的很想远离HQL,我相信这里应该有可能。

最佳答案

欢迎休眠。

save方法通知持久性上下文应保存或更新实例。除非使用flush参数,否则该对象将不会立即保留。

如果不使用冲洗,则会进行批量保存,因此在保存后立即设置查询时,似乎没有数据。

您需要添加

 locations[it].save(failOnError: true, flush:true)

关于grails - Grails:查询hasMany关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401366/

相关文章:

json - 使JSON中的allError失效

json - 使用JSON数据获取http发布请求

css - 使用 Grails 的插件

grails - 如何在Grails中用于继承的数据库列 'class'中添加索引?

grails - 尝试对具有关系的实体执行软删除会导致异常

grails - Grails 3/GORM-记录更改时的日志条目

bash - 尝试在Grails中运行bash脚本时缺少属性

grails - 将特定包的消息记录到 grails 和 log4j 中的一个文件中

grails - Grails静态映射失败(重复的ID)

grails - Grails中Shiro插件的正确标准