java - 为什么使用 @PreUpdate 调用 EntityManager.merge 方法不会返回更新的实体?
问题描述
我想更新我的实体。
我正在使用 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()。
推荐阅读
- tabulator - 在制表器中为可以接受多个值的选项字段创建标题过滤器
- docker - Docker ee ucp 问题 - 重新启动节点后遇到以下错误,并且 ucp 控制器显示不健康状态
- javascript - 在 JavaScript 中直接使用对象名称(而不是 this 关键字)有什么缺点吗?
- arduino - Arduino按钮控制VB6形状填充颜色
- java - 使 JScrollPane 中 JList 单元格渲染器中的 JTextArea 调整大小以滚动视图宽度、内容高度
- formula - 为什么 if 条件现在与 now() 一起使用
- algorithm - 生成所有可能组合的分类和复杂性:P、NP、NP-Complete 或 NP-Hard
- java - Java - 仅在尚未转义时转义双引号
- flutter - Flutter 按主题更改颜色
- haskell - Haskell IO 递归(带二叉树)