【问题标题】:Hibernate ORM - supporting Java 1.8 Optional for entity propertiesHibernate ORM - 实体属性支持 Java 1.8 Optional
【发布时间】:2014-07-26 21:45:41
【问题描述】:

我正在尝试在某些 Persistent 类中使用 java.util.Optional。有什么解决方法可以让它工作吗? 我曾尝试使用 UserType,但如果不手动将其映射到 SQL 类型,则无法处理 Optional 之类的内容(不可接受) 我也尝试使用 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);
   }
}

谢谢!

【问题讨论】:

标签: java hibernate jpa orm java-8


【解决方案1】:

您不能将java.util.Optional 用作持久实体属性,因为Optional 不是Serializable

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

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

private String name;

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

【讨论】:

  • 我看到了这一点,我真的不得不说,你永远不应该只在属性中使用 Optional 作为方法的返回值。
  • 我看到了这一点,我真的不得不说,只要您对它感到满意,即使每个人都在重复语言架构师,只要您想在代码库中避免 null,您就可以使用 optional谁不想在核心库中有“可选”的“monadic-ish”组合,以支持坚持使用 Hoars 10 亿美元的错误。只要确保防范带有无效对象的外部库/api”,你就会没事的。
猜你喜欢
  • 2010-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多