保存字段时更新时间

时间:2017-04-25 22:24:34

标签: java spring hibernate spring-data

我有Enity with field

@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updateDate")
private Date updateDate;

当我使用Hibernate进行更新时,此字段会自动将日期更改为当前日期

session.save(user); //IT'S OK

bat我想只设置Spring Data的电子邮件

@Transactional
@Modifying
@Query("update User e set e.email = :email where e.id = :id")
public void setEmail(@Param("id") Long id, @Param("email") String email);

虽然电子邮件更改不是当前时间的字段。为什么呢?

3 个答案:

答案 0 :(得分:1)

尝试使用此(未经测试):

@Transactional
@Modifying
@Query("update User e set e.email = :email, e.updateDate = ?#{T(java.sql.Timestamp).valueOf(T(java.time.LocalDateTime).now())} where e.id = :id")
public void setEmail(@Param("id") Long id, @Param("email") String email);

SpEL support in Spring Data JPA @Query definitions

甚至这个变种:

@Transactional
@Modifying
@Query("update User e set e.email = :email, e.updateDate = :curTime where e.id = :id")
void setEmail(@Param("id") Long id, @Param("email") String email, @Param("curTime") Timestamp curTime);

default void setEmail(Long id, String email) {
    setEmail(id, email, Timestamp.valueOf(LocalDateTime.now()));
}

答案 1 :(得分:0)

根据UpdateTimestamp文档

  

将属性标记为包含实体的更新时间戳。每当更新拥有实体时,属性值将设置为当前VM日期。

我想您必须将其删除并在所需的时间内手动执行

答案 2 :(得分:0)

您正在使用批量更新声明,这意味着用户实体在执行该更新时不受实体管理员管理,因此时间戳不会自动更新。

以下内容会导致时间戳更新......

User user = userRepository.findOne(userId);
user.setEmail(email);
userRepository.save(user);