我正在使用以下条件来检索已授予某些角色的所有Person
个对象(在PersonService
中):
@Transactional(readOnly = true)
List findAllByRoles(authorities) {
Person.createCriteria().list {
personRoles {
role {
'in'('authority', authorities)
}
}
order('name', 'asc')
}.unique(false)
}
我现在遇到的问题是它返回List
个Person__$$__javassist_67
个对象而不是Person
个对象。
如何更改语句以便检索Person
个对象?
编辑:
我需要这个,因为我正在使用我在这里与另一个Person
对象列表相关的列表。因为我想在两个列表中的一个上使用removeAll
,所以需要包含相同类型的对象,而不是这种情况。
答案 0 :(得分:1)
在equals
上实施Person
方法,以便能够确定2个实例是否相等,哪个实体可以在代理上运行
答案 1 :(得分:0)
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
。