我需要跟踪一个持久实体的字段,这个字段将经常更改,并不是该实体的真正特征,而是某种计算。有时,用户想要查看该计算,但这种情况非常罕见(一个月左右)。 所以这个计算的结果必须以某种方式保存,但我想避免每次更改时将其保存在数据库中,因为这会每次都触发父实体的更新事件(这将创建不必要的数据库事务,用户通知等)。
解决此问题的第一个想法是使字段瞬态,但将其保存在hibernate的二级缓存中。在查看文档时我没有找到办法,但也许我会监督一个隐藏的可能性。 所以你知道这是否可能以及如何做到这一点?
(我还有其他可能解决这个问题的方法,例如使用容器的数据网格,在我的案例中是Infinispan of JBoss - 但这需要为每个应用服务器提供不同的解决方案。我只是想确定上面是否 - 提及的解决方案,可以独立于容器,可以替代)
答案 0 :(得分:2)
如果计算是SQL函数,则可以使用@Formula(而不是在应用程序中进行计算和存储)。
关于二级缓存,不会缓存瞬态字段。缓存(以及一般的ORM)基于持久对象/属性及其元数据。根据定义,瞬态被完全忽略。