2016-09-02 3 views
2

엔티티에 영구적 인 속성 A이 있고 T1, T2이라는 2 개의 일시적인 필드가 있다고 가정 해보십시오. 엔티티가 지속되면 T1, T2을 기반으로 A을 계산해야합니다 (변경할 수없는 레거시 데이터베이스라고 가정).지속하기 전에 임시 속성을 기반으로 영구 속성을 계산하는 방법은 무엇입니까?

@Entity 
Class MyEntity { 
    @Column(name="persistantA") 
    Integer A; 

    @Transient 
    Integer T1; 

    @Transient 
    Integer T2; 

    @PrePersist 
    void prePersist() { 
     A = T1 * T2; 
    } 
} 

그러나 prePersist() 메서드 내 모든 transient 필드들은이 초기 값으로 설정 --- 해제 ---이 최대 절전/JPA에 대한 적절한 행동 것으로 보인다된다.

어떻게 극복 할 수 있습니까?

저는 Jpa와 Hibernate로 Spring 부트를 사용하고 있습니다.

답변

1

EntityManager::persist을 호출하여 새 엔터티를 지속하면 설명하는 동작이 수행되지 않고 @PrePersist 메서드에서 일시적인 필드가 표시됩니다.

그러나 새 엔티티를 EntityManager::merge으로 유지하면 병합 메커니즘은 일시적인 필드를 무시합니다. 이는 예상되는 동작입니다. 즉, Hibernate가 인식하는 속성 만 병합됩니다. merge은 항상 인수가 관리 인스턴스 인 경우를 제외하고는 복사본을 반환하므로 수동으로 merge 연산 결과에 임시 필드를 복사해야합니다.

+0

당신 말이 맞습니다. 그러나 나는 persit() 및 merget() 모두에 대한 변환을 수행하려고합니다. 마지막으로 setter 메서드에서 transform 함수를 호출하여이 문제를 해결했습니다. – xing

관련 문제