我有一个Hibernate Entity类,它使用LocalDate(value-based类)字段实现Serializable接口。
根据JPA规范
如果要通过值将实体实例作为分离对象(例如,通过远程接口)传递,则实体类必须实现Serializable 接口
在我的情况下,我不打算在不同的JVM中使用这些对象,因此不需要通过网络进行序列化和发送。另一方面,使用缓存系统证明需要实现可序列化的接口。
我们在这个项目上有一个SonarQube。与我的案例有关的规则之一如下,我引用了SonarQube规则。
如果程序试图将两个引用区分为基于值的类的相等值,无论是直接通过引用相等还是间接通过引发同步,身份哈希,序列化等,程序可能会产生不可预测的结果......
现在,假设我开始使用基于磁盘的缓存机制,然后基于上述规则以及我的Entity中可序列化的事实以及基于值的字段的使用,该字段无法转换为瞬态,
最佳行动方案是什么?在Serializable Hibernate实体中使用基于值的字段的正确方法是什么?
答案 0 :(得分:1)
该注释基本上表示您不应该尝试根据LocalDate的身份建立任何逻辑(即在LocalDate上同步,尝试将两个相等的LocalDate与==
或!=
区分开来,将它们用作IdentityMap的键,等等。
这并不意味着您无法序列化包含LocalDate的类。 LocalDate实现了Serializable,因此不会造成任何问题。
我的猜测是作者关于序列化的意思是你不应该假设序列化然后反序列化LocalDate会给你一个具有不同身份的LocalDate,你可以安全地假设类。
简而言之,将LocalDate视为没有身份。