2017-04-10 7 views
0

@PrePersist 메서드를 사용하여 GenericEntity 클래스를 가지고 있는데 엔티티를 DB에 저장하기 직전에 타임 스탬프를 설정합니다. 그것은 잘 작동하지만 나는 DAO 클래스를 테스트하려고 할 때 문제에 직면하고있다. 엔터티를 저장할 때 @PrePersist은 명시 적으로 created 필드 값을 덮어 씁니다. 테스트 환경에서 @PrePersist를 옵션으로 설정하여 created 필드 값을 명시 적으로 설정할 수 있습니까?JPA @PrePersist 테스트 환경에서

@MappedSuperclass 
public abstract class GenericEntity { 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id", updatable = false, nullable = false) 
    private Long id; 

    @Temporal(TemporalType.TIMESTAMP) 
    @Column(name = "created", nullable = false) 
    private Date created; 

    public Long getId() { 
     return id; 
    } 

    public void setId(Long id) { 
     this.id = id; 
    } 

    @PrePersist 
    protected void onCreate() { 
     created = new Date(); 
    } 

    /* 
    * Used for tests 
    */ 
    public void setCreated(Date created) { 
     this.created = created; 
    } 

    public Date getCreated() { 
     return created; 
    } 
} 
+1

사용자 EntityListeners : 나는 문제를 해결하는 가장 쉬운 방법은 간단 널 (null) 검사라고 생각 https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en /html/listeners.html – fangdi

+0

persistence.xml에 2 개의 영속 단위가 있습니다. GenericEntity 클래스에 대해 다른 EntityListener를 사용하도록 이들을 구성하는 방법은 무엇입니까? – Justas

답변

1

당신은 당신이 @PrePersist 방법이 값을 덮어 쓰지한다 (세터에 의해) 만들어 값을 설정하는 액세스 권한을 부여합니다. 콜백을위한 인터셉터로

@PrePersist 
protected void onCreate() { 
    if (created == null) { 
     created = new Date(); 
    } 
} 
+0

그냥 == 대신! = – Justas

+0

그래, 내 실수 :) –