class Extra { int a; } @Entity @Table(name = "data_table") @Data class Data { @Column int state; @Column(name = "extra") String _extra; @Transient Extra extra; @PostLoad void preLoad() { extra = mapper.readValue(_extra, Extra.class); } @PrePersist @PreUpdate void prePersist() { _extra = mapper.writeValueAsString(extra); } } Data data = jpaRepository.findOne(...); data.setState(1); data.getExtra().setA(1); jpaRepository.save(data); I want to use extra string column as Extra object. So I made @PostLoad, @PrePersist callbacks, which are converting extra column. But, when I persist data object, state value is persisted, but extra column (Data._extra) is not persisted. What did I do wrong?