gpt4 book ai didi

java - 在 Apache Cayenne 中获取新的数据对象

转载 作者:行者123 更新时间:2023-12-02 00:26:42 24 4
gpt4 key购买 nike

我希望记录对某些表执行的每个操作。我希望在列级别进行日志记录(不是全部,而是一些),因此如果某个列的值已更改,我想记录该列的值。

用户 U 更改了产品 x 的价格

(假设价格和产品在同一个表中。)

为此,我想监控产品 x 的价格列。

我无法使用触发器来执行此操作,因为我也希望用户被记录,用户信息 atm 位于门户应用程序中(无法将其传递给触发器)。

我目前正在使用 apache cayenne,在更新前(在实体类中)回调时,我想将新价格(用户在门户中选择的价格)与数据库中的价格进行比较

当我尝试从数据库获取产品时,辣椒不会返回一个新的对象,而是返回具有更改值的相同对象

我想知道是否有人知道 Cayenne 可以通过某种方式向我返回相同 pk(id) 的新鲜对象(这就是我用来从数据库获取新鲜对象的方法)

可以用其他方式给我建议

最佳答案

有几种方法可以解决这个问题。这是我认为最透明的一个。诀窍是使用与提交更改不同的 ObjectContext。然后您将获得该对象的单独副本,其中将包含当前保存的值:

// 'this' refers to the DataObject being committed (assuming things happen in its callback)

ObjectContext parallelContext = ... // create a new context here like you normally would

// 3.1 API; 3.0.x has a similar method with a slightly different sig
MyClass clone = parallelContext.localObject(this);

// if you are ok with cached old value, ignore the 'invalidateObjects' call.
// If not, uncomment it to ensure the object gets refetched.
// Also 3.1 API. Should be easy to adjust for 3.0

// parallelContext.invalidateObjects(clone);

Object oldValue = clone.getXyz();

关于java - 在 Apache Cayenne 中获取新的数据对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9899873/

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