Grails-createCriteria返回javassist实例,而不是特定的域



我使用以下条件来检索(在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

相关内容

  • 没有找到相关文章

最新更新