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

时间:2014-07-26 21:45:41

标签: java hibernate jpa orm java-8

我正在尝试在某些Persistent类中使用java.util.Optional。是否有任何解决方法使其工作? 我已经尝试过使用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);
   }
}

谢谢!

1 个答案:

答案 0 :(得分:31)

正如this blog post中所述,您不能将java.util.Optional用作持久化实体属性,因为Optional不是Serializable

但是,假设您使用field-based access,则可以在getter / setter方法中使用Optional容器。

然后,

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

private String name;

public Optional<String> getName() {
    return Optional.ofNullable(name);
}