Hibernate ORM - 支持Java 1.8实体属性的可选项

Fed*_*ani 18 java orm hibernate jpa java-8

我试图java.util.Optional在一些Persistent类中使用.是否有任何解决方法使其工作?我已经尝试过使用UserType,但它不可能处理像Optional这样的东西而不用手工映射到SQL类型(不可接受)我也尝试使用JPA Converter,但它不支持参数化类型.我可以使用包装getter和setter之类的,但它更像是一个hack而不是一个解决方案

public class MyClass {
   private MyOtherClass other;

   public Optional<MyOtherClass> getOther() {
      return Optional.ofNullable(other);
   }

   public voud setOther(Optional<MyOtherClass> other) {
      this.other = other.orElse(null);
   }
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

Vla*_*cea 33

正如本博文中所述,您不能将其java.util.Optional用作持久化实体属性,因为Optional不是Serializable.

但是,假设您使用的是基于字段的访问,则可以Optional在getter/setter方法中使用该容器.

然后,Hibernate可以从实体属性中获取实际类型,而getter和setter可以使用Optional:

private String name;

public Optional<String> getName() {
    return Optional.ofNullable(name);
}
Run Code Online (Sandbox Code Playgroud)

  • 我看到了这一点,我真的不得不说,你可以在你的代码库中避免使用"null",只要你觉得它很舒服,即使每个人都不断重复那些不想拥有"monadic"的语言架构师. - 核心图书馆中的"选择性"组成,支持坚持使用10亿美元的错误.只需确保防止外部库/ apis"出现无效对象,你就可以了. (5认同)