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

如何正确使用Hibernate @Where注解筛选deleted_at非空的实体?

解决Spring Boot JPA中使用@Where注解筛选deleted_at不为空实体的问题

你的问题出在SQL条件的写法上——SQL里判断字段是否为NULL不能用普通的=运算符,必须使用IS NULL或IS NOT NULL。你之前尝试的deleted_at=null这类写法在SQL中是无效的,这就是为什么返回空数组。

要实现“仅查询deleted_at列不为空的实体”,只需把@Where注解的clause值改成deleted_at IS NOT NULL即可。

修改后的实体代码如下:

@Data
@Entity
@Table(name="examples")
@NamedQuery(name="Example.findAll", query="SELECT l FROM Example l")
@SQLDelete(sql = "UPDATE examples SET deleted_at = CURRENT_TIMESTAMP() WHERE id = ?")
@Where(clause = "deleted_at IS NOT NULL") // 关键修改处
public class Example {
  @Id
  @GeneratedValue(strategy= GenerationType.IDENTITY)
  Long id;
  String name;
  Timestamp deletedAt;
}

补充说明:

  • 如果需求是查询未被软删除的实体(即deleted_at为空的记录),只需把clause改成deleted_at IS NULL。
  • JPA会自动将实体中的deletedAt字段映射到数据库的deleted_at列(驼峰转下划线的默认规则),无需手动指定列名匹配。

内容的提问来源于stack exchange,提问作者Karlo Gašpar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:20:39