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);
}