gpt4 book ai didi

java - Hibernate EntityListeners - PrePersist 方法在持久调用之前修改模型 - 如果持久调用失败怎么办?

转载 作者:行者123 更新时间:2023-12-02 06:37:23 24 4
gpt4 key购买 nike

如上所述 - 如果持久调用失败,我们已经修改了模型,这意味着我们正在使用(现在已修改,但由于异常而实际上并未持久化)模型。如果这是在服务层而不是 EntityListener 中,那么我们实际上可以在该特定类的任何异常处理中调用 DAO 之前更改回我们更改的任何属性。

出于这个原因 - 对模型的更改最好限制为“Service”层对象,而不是“Listeners”(它应该只用于我们想要的额外信息)持久化,而不是我们将来使用的实际模型数据)?

最佳答案

问题不在于修改模型,而在于修改的语义。您可以在 Hibernate 文档的这个示例中看到,在持久化模型之前,可以很好地使用 @PrePersist 来更改模型的 lastUpdate 日期。此方法仅修改可以被视为元数据的内容。

public class LastUpdateListener {
/**
* automatic property set before any database persistence
*/
@PreUpdate
@PrePersist
public void setLastUpdate(Cat o) {
o.setLastUpdate( new Date() );
}
}

如果您想要修改业务模型数据,那么服务层就是您需要放置代码的位置,因为它是其他人期望的位置 ( http://en.wikipedia.org/wiki/Principle_of_least_astonishment )。

关于java - Hibernate EntityListeners - PrePersist 方法在持久调用之前修改模型 - 如果持久调用失败怎么办?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19491335/

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