我知道关于这个问题有几个问题,但是似乎没有一个对我有用。我有一个带有以下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/