Hibernate:是否可以在二级缓存中保存 transient 字段?

标签 hibernate jakarta-ee jpa

我需要跟踪持久实体的字段,该字段会经常更改,并且实际上并不是该实体的功能,而是某种计算。有时,用户希望看到该计算结果,但这种情况非常罕见(每月一次左右)。 因此,必须以某种方式保存此计算的结果,但我想避免每次更改时都将其保存在数据库中,因为这每次都会触发父实体的更新事件(这会创建不必要的数据库事务,用户通知等)。

解决这个问题的第一个想法是让字段 transient ,但将其保存在hibernate的二级缓存中。在查看文档时,我没有找到这样做的方法,但也许我发现了一个隐藏的可能性。 那么您知道这是否以及如何可能吗?

(我还有其他可能性来解决这个问题,例如使用容器的数据网格,在我的例子中是 JBoss 的 Infinispan - 但这需要为每个应用程序服务器提供不同的解决方案。我只是想确定上述是否可行-提到的解决方案独立于容器,可以作为替代方案)

最佳答案

如果计算是 SQL 函数,您可以使用 @Formula(而不是在应用程序中计算并存储)。

关于二级缓存,不, transient 字段不会被缓存。缓存(以及一般的 ORM)基于持久对象/属性及其元数据。根据定义, transient 被完全忽略。

关于Hibernate:是否可以在二级缓存中保存 transient 字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19677370/

相关文章:

java - 关于Seam上下文范围的问题

java - Spring JPA 选择特定列

java - Spring 有 ORM,还是只使用 ORM 框架?

java - 异常发现得太早

java - 如何提高使用JDBC导入数据库的性能?

jakarta-ee - 如何创建可配置的 CDI Producer?

java - JPA的Hibernate实现

java - ManyToManyToMany - 使用 Hibernate 注释连接三个表

java - spring - 启动(创建 beans 时出错) - org.springframework.beans.factory.UnsatisfiedDependencyException : Error creating bean with name

java - Eclipse 'generate entities from tables' 和 'many to one' 关系