Java 保存字段时更新时间

Java 保存字段时更新时间,java,spring,hibernate,spring-data,Java,Spring,Hibernate,Spring Data,我对菲尔德很有兴趣 @UpdateTimestamp @Temporal(TemporalType.TIMESTAMP) @Column(name = "updateDate") private Date updateDate; 当我使用Hibernate进行更新时,此字段会自动将日期更改为当前日期 session.save(user); //IT'S OK bat我只想通过Spring数据设置电子邮件 @Transactional @Modifying @Query("update Use

我对菲尔德很有兴趣

@UpdateTimestamp
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updateDate")
private Date updateDate;
当我使用Hibernate进行更新时,此字段会自动将日期更改为当前日期

session.save(user); //IT'S OK
bat我只想通过Spring数据设置电子邮件

@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);
虽然电子邮件更改在当前时间不会显示该字段。为什么?

根据文件

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


我想您必须删除它,并在需要的时候手动执行它。如果您使用的是批量更新语句,这意味着在执行更新时,用户实体不受实体管理器的管理,因此时间戳不会自动更新

以下操作将导致时间戳被更新

User user = userRepository.findOne(userId);
user.setEmail(email);
userRepository.save(user);
尝试使用此选项(未测试):

甚至这个变体:

@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()));
}

别忘了接受帮助您的答案…使用Timestamp.valueOf(LocalDateTime.now())为手动为我使用的字段设置日期。
@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()));
}