假设我为一个由Hibernate处理的类中的给定属性定义了一组get和set函数。 set函数是公共函数,可以通过Hibernate的机制调用以及正常的代码流。
如果Hibernate调用了set函数,它应该只设置字段的值。如果该集由另一个源调用,则它还应相应地更新其他字段。
代码中是否有办法区分这两种情况?或者,处理这种情况有更好的做法吗?
答案 0 :(得分:2)
处理它的最简单方法是将Hibernate配置为直接访问字段而不是通过方法。在这种情况下,您可以在getter和setter中实现任何类型的逻辑,而Hibernate不会触发它。
如果使用基于注释的方法,可以通过在字段上放置注释来配置此行为。
如果必须使用属性访问器,则可以创建由同一字段支持的两个属性 - 一个用于Hibernate(可以是非public
),另一个用于其他代码(应注释为@Transient
让Hibernate忽略它。)
答案 1 :(得分:0)
Hibernate不会这样做。这是属于您的代码的业务逻辑,而不是Hibernate。这是一个ORM解决方案,可以完成一件事:持久化对象。它试图让你忘记有一个关系数据库在后面做这项工作。
您所谈论的是基于源的业务逻辑以及您可能想到但尚未表达的其他内容。只有你能写出来。将它放在实现用例的服务中。如果这是一个贯穿各领域的问题,请将其置于一个方面。