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 个实例是否相等,这将跨代理工作