我使用以下条件来检索(在PersonService
中)授予某些角色的所有Person
对象:
@Transactional(readOnly = true)
List findAllByRoles(authorities) {
Person.createCriteria().list {
personRoles {
role {
'in'('authority', authorities)
}
}
order('name', 'asc')
}.unique(false)
}
我现在遇到的问题是,它返回一个带有Person__$$__javassist_67
对象而不是Person
对象的List
。
如何更改语句以检索Person
对象?
编辑:
我需要这个,因为我使用的是与另一个Person
对象列表相关的列表。由于我想在两个列表中的一个列表上使用removeAll
,两者都需要包含相同类型的对象,但事实并非如此。
在Person
上实现equals
方法,以便能够识别两个实例是否相等,这将在代理上工作
在本例中,Person__$$__javassist_67
对象只是Person
类的代理,这很可能是由延迟获取引起的。我不知道你为什么会在这种情况下得到它。我会尝试明确设置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
。