实体字段中的Java 8可选

实体字段中的Java 8可选,java,hibernate,java-8,optional,Java,Hibernate,Java 8,Optional,我可以在hibernate实体的字段中使用可选选项吗?可能有一些自定义用户类型 我知道我可以在使用AccesType.FIELD的方法中使用它(无论如何我都使用AccesType.FIELD) 我为什么要这个?嗯,我希望尽可能远离空值。您不应该将可选用作类中的字段(无论是否用于Hibernate) 如所述,它是一个基于值的类,因此不可序列化,并且使用引用等式(=)和标识哈希代码会产生不可预测的结果 相反,您可以存储目标类的一个实例(在关系数据库中null是可以的),并从访问器返回一个可选的类(而

我可以在hibernate实体的字段中使用可选选项吗?可能有一些自定义用户类型

我知道我可以在使用
AccesType.FIELD
的方法中使用它(无论如何我都使用
AccesType.FIELD


我为什么要这个?嗯,我希望尽可能远离空值。

您不应该将
可选
用作类中的字段(无论是否用于Hibernate)

如所述,它是一个基于值的类,因此不可序列化,并且使用引用等式(=)和标识哈希代码会产生不可预测的结果

相反,您可以存储目标类的一个实例(在关系数据库中null是可以的),并从访问器返回一个可选的类(而不是getter,如果我记得清楚的话,它在休眠时希望返回与字段相同的类)


希望这会有所帮助。

Optional的equals和hashCode实现有什么不可预测的地方?在您链接到的Javadoc中,他们似乎有一个明确、坚定的合同。很抱歉给您提供了快捷方式。我不是指等于和hashcode,而是==和标识hashcode。谢谢你的更正。