Seu código está funcionando conforme o esperado. Depois de implementar
Persistable você pode ver que @CreatedDate anotação está funcionando. Claro que
createdDate é null na segunda chamada de save porque o objeto já existe no banco de dados e você o atualizou com createdDate = null . Como você pode ver na documentação para @CreatedDate :Portanto, para não substituir seu
createdDate com null na segunda chamada você deve recuperar seu cliente do banco de dados com c = repository.findOne("test_id"); e depois atualizá-lo.