Hibernate的二级缓存中自定义用户类型的内部表示

时间:2014-09-24 08:27:36

标签: java hibernate caching ehcache

Hibernate在二级缓存中以脱水形式存储实体。这对我来说很好,直到自定义用户类型进入场景,特别是Jadira's UserType库,我用它来映射Joda时间类型。

Persistence开箱即用,但Hibernate将{" raw" (序列化)将LocalDate实例引用到其二级缓存中,这会导致一些问题,因为每个LocalDate实例都会保留大量对内部数据结构的引用,这些引用不应该在缓存中出现。

有没有办法挂钩Hibernate的(去)水合策略,以便对哪些数据最终存储在它的二级缓存中进行细粒度控制?

1 个答案:

答案 0 :(得分:2)

Jadira的UserType库使用org.hibernate.usertype.UserType来实现其自定义类型。 UserType个实例在放入二级缓存时会被简单地序列化,这对于Joda时间实例来说是一个不太理想的选择。

问题可以通过在实现自定义类型时使用org.hibernate.usertype.CompositeUserType来解决,这使您可以完全控制实体在放入(或取出)缓存时应如何(去)水合。

我向Jadira提交了一个功能请求,但是现在我只是通过实现自己的自定义类型来推进。