gpt4 book ai didi

java - 测试环境中的JPA @PrePersist

转载 作者:行者123 更新时间:2023-12-02 02:54:35 25 4
gpt4 key购买 nike

我有 GenericEntity 类,其中包含 @PrePersist 方法 onCreate(),它在将实体保存到数据库之前设置时间戳。它运行良好,但当我尝试测试我的 DAO 类时,我遇到了问题。 @PrePersist 在保存实体时覆盖显式设置的created 字段值。如何在测试环境中使 @PrePersist 可选,以便我可以显式设置 created 字段值?

@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;
}
}

最佳答案

如果您授予对设置创建值的访问权限(通过 setter),则不应在 @PrePersist 方法中覆盖此值。我认为解决问题最简单的方法是简单的空检查:

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

关于java - 测试环境中的JPA @PrePersist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43316673/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com