`getPersistentValue`应该用于收藏吗?

时间:2013-12-07 10:23:53

标签: grails gorm

如果Team hasMany = [players: Player]Player belongsTo = [team: Team]team.getPersistentValue('players')应该从数据库中返回players列表(如上所述{{3} }})?或者这仅适用于非收集属性?

对我而言,它返回与team.players相同的列表,即使我使用addToPlayersremoveFromPlayers(Grails 2.3.4)更新了列表。

1 个答案:

答案 0 :(得分:6)

getPersistentValue不会进入数据库。当Hibernate创建域类实例时,它会保留原始数据的副本,这是用于isDirty检查和getPersistentValue的内容。 Hibernate在刷新时使用数据来对当前状态与原始状态进行逐场比较,以确定是否应将任何内容推送到数据库。

然而,集合是不同的。这不是一个简单的HashSet / ArrayList - 它是一个具有变化意识的PersistentSet / PersistentList。但它没有跟踪发生了什么变化,只是发生了变化。所以没有什么比较可以在不进入数据库的情况下找到以前的状态。

最大的问题是,对于小型馆藏,你可以实现一些明智的东西。但是在一般情况下你不知道集合有多大,它可能有很多元素,所以在内存中这样做会非常昂贵。