2017-04-10 100 views
0

我有GenericEntity@PrePersist方法onCreate()它设置时间戳就在将实体保存到数据库之前。它运行良好,但是当我尝试测试我的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为您的回调拦截: https://docs.jboss.org/hibernate/entitymanager/3.5/reference/en /html/listeners.html – fangdi

+0

我在persistence.xml中有2个持久单元。如何配置它们以对GenericEntity类使用不同的EntityListeners? – Justas

回答

1

如果你给访问设置创造价值(由二传手),你不应该在@PrePersist方法覆盖此值。我认为,解决这个问题最简单的方法是简单的空检查:

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

只是==而不是!= – Justas

+0

是的,我的错误:) –