Hibernate 将实体以脱水形式存储在其二级缓存中。这对我来说效果很好,直到自定义用户类型进入场景,特别是 Jadira's UserType库,我用它来映射 Joda 时间类型。
持久性开箱即用,但 I've discovered Hibernate 会将对 LocalDate
实例的“原始”(序列化)引用放入其二级缓存中,这会导致一些问题,因为每个 LocalDate
实例都会保留大量对内部数据结构,不应出现在缓存中。
有没有一种方法可以连接到 Hibernate 的(脱水)策略来精细控制哪些数据最终将存储在其二级缓存中?
最佳答案
Jadira 的 UserType 库使用 org.hibernate.usertype.UserType 来实现其自定义类型。 UserType
实例在放入二级缓存时会被简单地序列化,这对于 Joda 时间实例来说并不是理想的选择。
这个问题可以通过在实现自定义类型时使用org.hibernate.usertype.CompositeUserType
来解决,这使您可以完全控制实体在放入(或取出)时应如何(脱水)水合出)缓存。
我向 Jadira 提交了功能请求,但现在我将通过实现我自己的自定义类型来继续前进。
关于java - Hibernate 二级缓存中自定义用户类型的内部表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26012103/