Hibernate在二级缓存中以脱水形式存储实体。这对我来说很好,直到自定义用户类型进入场景,特别是Jadira's UserType库,我用它来映射Joda时间类型。
Persistence开箱即用,但Hibernate将{" raw" (序列化)将LocalDate
实例引用到其二级缓存中,这会导致一些问题,因为每个LocalDate
实例都会保留大量对内部数据结构的引用,这些引用不应该在缓存中出现。
有没有办法挂钩Hibernate的(去)水合策略,以便对哪些数据最终存储在它的二级缓存中进行细粒度控制?
答案 0 :(得分:2)
Jadira的UserType库使用org.hibernate.usertype.UserType
来实现其自定义类型。 UserType
个实例在放入二级缓存时会被简单地序列化,这对于Joda时间实例来说是一个不太理想的选择。
问题可以通过在实现自定义类型时使用org.hibernate.usertype.CompositeUserType
来解决,这使您可以完全控制实体在放入(或取出)缓存时应如何(去)水合。
我向Jadira提交了一个功能请求,但是现在我只是通过实现自己的自定义类型来推进。