Grails - createCriteria returns javassist 实例而不是特定域
Grails - createCriteria returns javassist instances instead of specific domain
我正在使用以下条件来检索已授予特定角色(在 PersonService
中)的所有 Person
对象:
@Transactional(readOnly = true)
List findAllByRoles(authorities) {
Person.createCriteria().list {
personRoles {
role {
'in'('authority', authorities)
}
}
order('name', 'asc')
}.unique(false)
}
我现在遇到的问题是 returns 一个带有 Person__$$__javassist_67
个对象而不是 Person
个对象的 List
。
如何更改语句以检索 Person
个对象?
编辑:
我需要这个,因为我正在使用我在此处获得的列表与另一个 Person
对象列表相关联。因为我想在两个列表之一上使用 removeAll
都需要包含相同类型的对象,所以事实并非如此。
在这种情况下,Person__$$__javassist_67
对象只是 Person
class 的代理,这很可能是由延迟获取引起的。我不确定你为什么会在这种情况下得到它。我会尝试明确设置 fetchMode
:
import org.hibernate.FetchMode
...
Person.createCriteria().list {
fetchMode("personRoles", FetchMode.JOIN)
fetchMode("role", FetchMode.JOIN)
personRoles {
role {
'in'('authority', authorities)
}
}
order('name', 'asc')
}.unique(false)
您可能不需要第二个 fetchMode
。
在 Person
上实施 equals
方法,以便能够识别 2 个实例是否相等,这将跨代理工作
我正在使用以下条件来检索已授予特定角色(在 PersonService
中)的所有 Person
对象:
@Transactional(readOnly = true)
List findAllByRoles(authorities) {
Person.createCriteria().list {
personRoles {
role {
'in'('authority', authorities)
}
}
order('name', 'asc')
}.unique(false)
}
我现在遇到的问题是 returns 一个带有 Person__$$__javassist_67
个对象而不是 Person
个对象的 List
。
如何更改语句以检索 Person
个对象?
编辑:
我需要这个,因为我正在使用我在此处获得的列表与另一个 Person
对象列表相关联。因为我想在两个列表之一上使用 removeAll
都需要包含相同类型的对象,所以事实并非如此。
在这种情况下,Person__$$__javassist_67
对象只是 Person
class 的代理,这很可能是由延迟获取引起的。我不确定你为什么会在这种情况下得到它。我会尝试明确设置 fetchMode
:
import org.hibernate.FetchMode
...
Person.createCriteria().list {
fetchMode("personRoles", FetchMode.JOIN)
fetchMode("role", FetchMode.JOIN)
personRoles {
role {
'in'('authority', authorities)
}
}
order('name', 'asc')
}.unique(false)
您可能不需要第二个 fetchMode
。
在 Person
上实施 equals
方法,以便能够识别 2 个实例是否相等,这将跨代理工作