gpt4 book ai didi

java - 为什么使用 @PreUpdate 调用 EntityManager.merge 方法不会返回更新的实体?

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

我想更新我的实体。

我正在使用 JPA,并且正在调用 EntityManger.merge 方法。该实体使用@PreUpdate注解进行注解,该注解设置实体中的系统日期。

这是我调用执行更新的 DAO 方法:

@PersistenceContext(unitName = "myPersistentUnit")
protected EntityManager em;

@Override
public T update(T entity) throws MyException {
try {
return em.merge(entity);
} catch (Exception e) {
throw new MyException(e);
}
}

这是我要更新的实体:

@Entity
@Table(name = MyEntity.TABLE_NAME)
public class MyEntity {

public static final String TABLE_NAME = "MY_TABLE_NAME";

// other properties

@Column(name = "TIMESTAMP_LAST_UPDATE", nullable = true)
@Temporal(TemporalType.TIMESTAMP)
private Date timestampLastUpdate;

@PreUpdate
public void preUpdate() {
this.setTimestampLastUpdate(new Date());
}

// getters and setters

}

我期望 DAO 的方法

return em.merge(entity)

返回更新后的实体,并具有更新后的属性“timestampLastUpdate”,但事实并非如此。

最佳答案

回调在 SQL 语句发送到数据库之前或之后执行。

合并不会触发刷新来执行语句。如果你想触发监听器,你必须执行 EntityManager.flush()。

关于java - 为什么使用 @PreUpdate 调用 EntityManager.merge 方法不会返回更新的实体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56288771/

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