gpt4 book ai didi

grails - `getPersistentValue` 应该用于集合吗?

转载 作者:行者123 更新时间:2023-12-01 10:51:00 25 4
gpt4 key购买 nike

如果 Team hasMany = [players: Player]Player belongsTo = [team: Team], team.getPersistentValue('players') 是否应该从数据库中返回 players 列表(如 in the guide 所述)?还是这仅适用于非集合属性?

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

最佳答案

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

但是集合是不同的。它不是一个简单的 HashSet/ArrayList - 它是一个可感知变化的 PersistentSet/PersistentList。但它不跟踪发生了什么变化,只是发生了一些变化。因此,如果不去数据库,就没有什么可以通过比较来找到以前的状态。

最大的问题是对于小型集合,您可以为此实现一些合理的措施。但在一般情况下,您不知道集合可能有多大,并且可能包含大量元素,因此在内存中执行此操作会非常昂贵。

关于grails - `getPersistentValue` 应该用于集合吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20440218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com