Hibernate ORM - поддержка Java 1.8 Необязательно для свойств объекта

Я пытаюсь использовать java.util.Optional в некоторых классах Persistent. Есть ли способ обхода, чтобы заставить его работать? Я попытался использовать UserType, но не удалось обработать что-то вроде Необязательного без сопоставления его с типами SQL вручную (неприемлемо) Я также пытался использовать JPA Converter, но он не поддерживает Parameterized Types. Я мог бы использовать обматывающие геттеры и сеттеры вроде, но это больше похоже на взлом, чем на решение

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.Optional как атрибут сущности, поскольку Optional не Serializable.

Однако, предполагая, что вы используете полевой доступ, вы можете использовать контейнер Optional в методах getter/setter.

Hibernate затем может взять фактический тип из атрибута entity, в то время как getter и setter могут использовать Optional:

private String name;

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