Spring Data JPA - how to set transient fields after retrieval

前端 未结 3 870
遇见更好的自我
遇见更好的自我 2021-01-22 16:41

After an entity is fetched using the JpaRepository methods of Spring Data JPA, e.g. findOne, findBy..., etc., I was wondering what would b

相关标签:
3条回答
  • 2021-01-22 17:21

    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

    0 讨论(0)
  • 2021-01-22 17:22

    You can use @Access(AccessType.Property) for setting transient fields ideally.

    You have to mention @Access(AccessType.Property) on the setter method normally and then you can set value of that transient field in that setter method.

    Alternatively in case of repositories , you can very well write a JPQL something like this.

    @Query("SELECT new Hello(a.x*a.y,a.x,a.y)FROM Hello a WHERE t.value = :value")

    and then in the constructor set the value of this transient variable with a.x*a.y

    0 讨论(0)
  • 2021-01-22 17:26

    Have not tried myself but it seems that the @PostLoad annotation may help you to execute code to change the state of a business object after retrieving it from the database.

    But in your concrete case I would simply create a method getFullName that concatenates firstName and secondName without storing the value in the bean.

    0 讨论(0)
提交回复
热议问题