Hibernate ORM - supporting Java 1.8 Optional for entity properties

I'm trying to use java.util.Optional in some Persistent classes. Is there any workaround to make it work? I have tried using UserType, but its not possible to handle something like Optional without mapping it to SQL types by hand (not acceptable) I also tried to use JPA Converter, but it doesn't support Parameterized Types. I could use wrapping getters and setters like, but it's more like a hack than a solution

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

Thanks!

Upvotes: 21

Views: 12078

Answers (1)

Vlad Mihalcea
Vlad Mihalcea

Reputation: 154090

You cannot use the java.util.Optional as a persisted entity attribute since Optional is not Serializable.

However, assuming that you are using field-based access, you can use the Optional container in your getter/setter methods.

Hibernate can then take the actual type from the entity attribute, while the getter and setter can use Optional:

private String name;

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

Upvotes: 40

Related Questions