You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring JPA中使用@Query注解更新时设置FROZEN_DATE为当前时间

解决方案

没问题,这事儿很容易解决!你只需要调整一下你的JPQL更新语句,在设置冻结状态的同时把frozenDate字段赋值为当前时间就行,而且这个修改只会在冻结操作中生效,完全不会干扰其他字段的更新逻辑。

修改后的Repository代码

@Repository
public interface UserEntryRepository extends CrudRepository<UserEntry, String> {
    UserEntry findByUsername(String username);

    @Transactional
    @Modifying
    @Query("UPDATE UserEntry o SET o.frozen = 1, o.frozenDate = CURRENT_TIMESTAMP WHERE o.username = :username")
    int setFrozenForOfuser(@Param("username") String username);
}

关键细节说明

  • CURRENT_TIMESTAMP的作用:这是JPQL标准的内置函数,所有主流JPA实现(比如Hibernate)都支持它,会自动适配数据库对应的时间函数(比如MySQL的NOW()、PostgreSQL的CURRENT_TIMESTAMP),确保获取到的是数据库服务器的当前时间。
  • 字段映射一致性:要确保你的UserEntry实体类里的字段名和JPQL中的frozenDate完全对应,同时数据库表的FROZEN_DATE字段类型要和实体类字段匹配,比如用LocalDateTime类型(推荐):
@Entity
@Table(name = "user_entry")
public class UserEntry {
    // 其他字段...
    
    private Integer frozen;
    
    @Column(name = "FROZEN_DATE")
    private LocalDateTime frozenDate;
    
    // 对应的getter/setter方法...
}
  • 不影响其他更新:其他更新操作(比如调用CrudRepository自带的save()方法修改用户其他字段)因为不会涉及frozenDate字段,所以完全不会改动这个日期的值,完美符合你的需求。

内容的提问来源于stack exchange,提问作者Ahmet Karakaya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:35:15