Почему вызов метода EntityManager.merge с @PreUpdate не возвращает обновленную сущность? - PullRequest
0 голосов
/ 24 мая 2019

Я хочу обновить свою сущность.

Я использую 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", но это не так.

1 Ответ

0 голосов
/ 24 мая 2019

Обратные вызовы выполняются до или после отправки операторов SQL в базу данных.

Слияние не вызывает сброс для выполнения операторов.Вы должны выполнить EntitiyManager.flush (), если хотите активировать слушателей.

...