gpt4 book ai didi

hibernate - 如何使用 hibernate Envers触发实体onLoad()?

转载 作者:行者123 更新时间:2023-12-02 15:16:08 25 4
gpt4 key购买 nike

我正在将Hibernate Envers添加到我的Grails 3项目中。我注意到,对于我的一个具有onLoad()事件的实体,永远不会为Envers修订版实体调用onLoad()事件。

我如何确保即使对该实体的历史修订版也始终调用此代码?

用例:

我正在使用Grails 3 JSON View 开发RESTful服务。我的一个域类有一个discriminator列,该列也必须在JSON输出中呈现,以便使用者可以知道它是什么类型。因此,域实体定义了onLoad()方法,该方法填充与鉴别符类型匹配的 transient 属性:

class MyChildDomainClass extends MyBaseDomainClass {
void onLoad() {
valueType = ValueType.STRING
}

static mapping = {
discriminator value: ValueType.STRING
}
}

这对于普通的域实例来说效果很好,但是当我从Envers的 AuditQueryCreator中查找实体修订时,审计查询没有调用 onLoad()方法。

似乎可以遍历结果并手动调用 onLoad(),但是我希望有更好的方法来解决此问题。

提前致谢!

最佳答案

How can I make sure this code is always invoked, even for historical revisions of this entity?



我对Grails并不熟悉,但是它们看起来很像典型的JPA事件生命周期注释事件,并且它们很可能是GORM(非常类似于JPA实现者)根据实体生命周期寻找和调用的方法。

这里最重要的一点是,Envers Query API 返回的对象不是实体。这些对象不是由持久性提供程序管理的,因此很重要的一点是,要清楚地进行区分,因为这会影响许多持久性行为的预期,例如分离的实体,实体生命周期事件等。

如果从 AuditQuery提取结果时需要触发一些后初始化或其他生命周期回调,则需要在用户代码上进行区分并根据需要调用这些方法。

关于hibernate - 如何使用 hibernate Envers触发实体onLoad()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59724072/

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