休眠 ORM - 支持 Java 1.8 实体属性的可选

2022-09-02 09:10:34

我试图在一些持久类中使用。是否有任何解决方法可以使其正常工作?我尝试过使用UserType,但是如果不手动将其映射到SQL类型(不可接受),就不可能处理像Anfety这样的东西,我也尝试使用JPA转换器,但它不支持参数化类型。我可以使用包装 getters 和 setters,但它更像是一个黑客而不是一个解决方案java.util.Optional

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

不能将 用作持久化实体属性,因为 不是 。java.util.OptionalOptionalSerializable

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

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

private String name;

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

答案 2

推荐