I am trying to save an entity using JPA but getting NotSerializableException for a field of type Optional.
Here my goal is to store custom object (here it is of type Grade) in JSON serialized form.
[Student.java]
@Entity
@Table(name = "student")
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Size(min = 3, max = 20)
    private String name;
    @Lob
    private Grade grade;
    public Student() {
    }
[Grade.java]
public class Grade implements Serializable {
    /**
     * 
     */
    private static final long serialVersionUID = 7351334541533041431L;
    private Optional<Integer> marks;
    public Optional<Integer> getMarks() {
        return marks;
    }
    public void setMarks(Optional<Integer> marks) {
        this.marks = marks;
    }
    @Override
    public String toString() {
        return "Grade [marks=" + marks + "]";
    }
}
[StudentRepository.java]
public interface StudentRepository extends JpaRepository<Student, Long> {
    public Student findByName(String name);
}
[StudentRepositoryTest.java]
@RunWith(SpringRunner.class)
@DataJpaTest
public class StudentRepositoryTest {
    @Autowired
    private TestEntityManager entityManager;
    @Autowired
    private StudentRepository studentRepository;
    @Test
    public void whenFindByName_thenReturnEmployee() {
        // given
        Student alex = new Student("alex");
        Grade grade = new Grade();
        grade.setMarks(Optional.ofNullable(90));
        alex.setGrade(grade);
        entityManager.persist(alex);
        entityManager.flush();
        // when
        Student found = studentRepository.findByName(alex.getName());
        System.out.println(found);
        // then
        assertThat(found.getName()).isEqualTo(alex.getName());
    }
}
After running above test getting following exception for marks field in Grade class:
Caused by: java.io.NotSerializableException: java.util.Optional
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
    at org.hibernate.internal.util.SerializationHelper.serialize(SerializationHelper.java:115)
    ... 49 more
I have included following dependency to support java8 data types for Jackson:
<dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-jdk8</artifactId>
        </dependency>
Spring boot version: 2.1.6.RELEASE
Shared the same code at: https://github.com/Omkar-Shetkar/spring-repo-test
What could be missing here?
 
     
     
     
    