为什么使用 @PreUpdate 调用 EntityManager.merge 方法不会 return 更新实体?
Why calling EntityManager.merge method with @PreUpdate does't return updated entity?
我想更新我的实体。
我正在使用 JPA 并且正在调用 EntityManger.merge 方法。
Entity使用@PreUpdate注解进行注解,在Entity中设置系统日期。
这是我调用来执行更新的 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)
returns 更新了实体,更新了 属性 "timestampLastUpdate",但事实并非如此。
回调在 SQL 语句发送到数据库之前或之后执行。
合并不会触发刷新来执行语句。
如果你想触发监听器,你必须执行 EntitiyManager.flush()。
我想更新我的实体。
我正在使用 JPA 并且正在调用 EntityManger.merge 方法。 Entity使用@PreUpdate注解进行注解,在Entity中设置系统日期。
这是我调用来执行更新的 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)
returns 更新了实体,更新了 属性 "timestampLastUpdate",但事实并非如此。
回调在 SQL 语句发送到数据库之前或之后执行。
合并不会触发刷新来执行语句。 如果你想触发监听器,你必须执行 EntitiyManager.flush()。