복붙노트

[SPRING] Spring Data JPA - 검색 후 일시적인 필드를 설정하는 방법

SPRING

Spring Data JPA - 검색 후 일시적인 필드를 설정하는 방법

Spring Data JPA의 JpaRepository 메소드를 사용하여 엔티티를 가져온 후에. findOne, findBy ... 등, 일부 자동 코드를 실행하는 최선의 방법이 무엇인지, 일시적인 필드를 초기화하는 것이 궁금합니다.

즉, fullName transient 필드가있는 User 엔터티가 있고 데이터베이스에서 페치 한 후 firstName과 lastName의 연결로 설정해야한다고 가정합니다. 어떻게해야합니까?

해결법

  1. ==============================

    1.첫째로, 전체 이름이 단지 forename / surname을 즉석에서 연결하는 메소드를 작성한다면 원하는 모든 것. 필드 일 필요는 없습니다.

    첫째로, 전체 이름이 단지 forename / surname을 즉석에서 연결하는 메소드를 작성한다면 원하는 모든 것. 필드 일 필요는 없습니다.

    엔티티로드에 대한 처리를 실제로 수행해야하는 경우 @PostLoad 엔티티 라이프 사이클 콜백을 등록하십시오.

    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

  2. ==============================

    2.직접 시도한 적은 없지만 @PostLoad 어노테이션이 데이터베이스에서 데이터베이스를 검색 한 후 Business Object의 상태를 변경하는 코드를 실행하는 데 도움이 될 것으로 보입니다.

    직접 시도한 적은 없지만 @PostLoad 어노테이션이 데이터베이스에서 데이터베이스를 검색 한 후 Business Object의 상태를 변경하는 코드를 실행하는 데 도움이 될 것으로 보입니다.

    그러나 구체적인 경우에는 bean에 값을 저장하지 않고 firstName과 secondName을 연결하는 getFullName 메소드를 작성합니다.

  3. ==============================

    3.@Access (AccessType.Property)를 사용하여 이상적인 필드를 설정할 수 있습니다.

    @Access (AccessType.Property)를 사용하여 이상적인 필드를 설정할 수 있습니다.

    setter 메서드에서 @Access (AccessType.Property)를 정상적으로 언급해야하며 setter 메서드에서 해당 transient 필드의 값을 설정할 수 있습니다.

    또는 리포지토리의 경우에는 이와 비슷한 JPQL을 작성할 수 있습니다.

    @Query ( "새 Hello 선택 (a.x * a.y, a.x, a.y) FROM Hello where WHERE t.value = : value")

    그런 다음 생성자에서 a.x * a.y를 사용하여이 일시 변수의 값을 설정합니다

  4. from https://stackoverflow.com/questions/37341217/spring-data-jpa-how-to-set-transient-fields-after-retrieval by cc-by-sa and MIT license