Grails “getPersistentValue”是否适用于集合?
如果Grails “getPersistentValue”是否适用于集合?,grails,gorm,Grails,Gorm,如果TeamhasMany=[players:Player]和PlayerbelongsTo=[Team:Team],那么是否应该Team.getPersistentValue('players')从数据库返回玩家列表(如上所述)?或者这仅适用于非集合属性 对我来说,它返回的列表与team.players相同,即使我使用addToPlayers和removeFromPlayers(Grails 2.3.4)更新了列表。getPersistentValue不会进入数据库。当Hibernate创建一
Team
hasMany=[players:Player]
和Player
belongsTo=[Team:Team]
,那么是否应该Team.getPersistentValue('players')
从数据库返回玩家列表(如上所述)?或者这仅适用于非集合属性
对我来说,它返回的列表与team.players
相同,即使我使用addToPlayers
和removeFromPlayers
(Grails 2.3.4)更新了列表。getPersistentValue
不会进入数据库。当Hibernate创建一个域类实例时,它会保留原始数据的一个副本,这就是用于isDirty
检查和getPersistentValue
的内容。Hibernate在刷新时使用数据对当前状态与原始状态进行逐字段比较,以确定是否应将任何内容推送到数据库
然而,收藏是不同的。它不是一个简单的HashSet
/ArrayList
——它是一个支持更改的PersistentSet
/persistentslist
。但它并没有追踪什么改变,只是有些东西改变了。因此,在不访问数据库的情况下,没有什么可以进行比较来查找以前的状态
最大的问题是,对于小集合,您可以为此实现一些合理的方法。但是在一般情况下,您不知道集合有多大,它可能包含大量元素,因此在内存中执行此操作将非常昂贵。感谢您的回答Burt,它证实了我的猜测。