我有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);
虽然电子邮件更改不是当前时间的字段。为什么呢?
答案 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)
答案 2 :(得分:0)
您正在使用批量更新声明,这意味着用户实体在执行该更新时不受实体管理员管理,因此时间戳不会自动更新。
以下内容会导致时间戳更新......
User user = userRepository.findOne(userId);
user.setEmail(email);
userRepository.save(user);