Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails “getPersistentValue”是否适用于集合?_Grails_Gorm - Fatal编程技术网

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,它证实了我的猜测。