Search code examples
springhibernatejpaspring-dataspring-data-jpa

Spring Data JPA - how to set transient fields after retrieval


After an entity is fetched using the JpaRepository methods of Spring Data JPA, e.g. findOne, findBy..., etc., I was wondering what would be the best way to automatically execute some custom code, say to initialize some transient fields.

In other words, suppose I have a User entity with a fullName transient field, which should be set as a concatenation of firstName and lastName after fetching from the database, what should I do?


Solution

  • Firstly, if all you want if full name just write a method that concatenates forename/surname on the fly. It doesn't have to be a field.

    If you really need to do some processing on Entity load then register a @PostLoad entity lifecycle callback:

    public class MyEntity{
    
         @PostLoad
         //invoked by framework on entity load.
         public void doStuff(){
             fullName =  forename + " " + surname;   
         }
    
         //alternative
         public String getFullName(){
             return forename + " " + surname;
         }
    

    https://en.wikibooks.org/wiki/Java_Persistence/Advanced_Topics#Example_of_Entity_event_annotations