我们有一个带有hibernate4:4.3.8.1
插件的 grails 2.5.5 应用程序。
当我们使用条件 API 和左连接查询具有 has-many 关系的域时,gorm 不会加载所有 has-many 关联。
例子:
class Role {
String name
}
class User {
String name
static hasMany = [roles: Role]
}
测试数据:
def role1 = new Role(name: "Role1").save()
def role2 = new Role(name: "Role2").save()
def user = new User(name: "User")
user.addToRoles(role1)
user.addToRoles(role2)
user.save()
当我们使用内部连接查询结果时,它会按预期工作并加载用户的所有角色:
User.withNewSession {
def user = User.withCriteria({
roles {
eq "name", "Role1"
}
}).first()
assert user.roles.size() == 2
}
但是当使用左连接查询时,用户结果只包含查询的“Role1”。未加载“角色 2”。
User.withNewSession {
def user = User.withCriteria({
roles(CriteriaSpecification.LEFT_JOIN) {
eq "name", "Role1"
}
}).first()
assert user.roles.size() == 2 //This breaks! Only Role1 is loaded.
}
有没有人知道为什么会这样?
注意:此代码仅在角色之前未正确加载时才会中断。这就是我withNewSession
在这个例子中使用的原因。