列为空的 Spring 数据查询

Posted

技术标签:

【中文标题】列为空的 Spring 数据查询【英文标题】:Spring data query where column is null 【发布时间】:2015-06-09 11:50:46 【问题描述】:

假设我有实体(为简洁起见,省略了 getter/setter 和各种细节):

@Entity
class Customer
    ...
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "customer")
    Collection<Coupon> coupons;


@Entity
class Coupon
    ...
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date usedOn;

    @ManyToOne(fetch = FetchType.LAZY)
    @NotNull
    Customer customer;

我希望检索具有 null usedOn 的给定客户的所有优惠券。 我没有成功地在 CouponRepository 中定义一个方法,如docs中所述

@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> 
     Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer);

但这会导致编译器错误Syntax error, insert "... VariableDeclaratorId" to complete FormalParameterList

【问题讨论】:

【参考方案1】:

尝试将您的方法更改为此(假设Customer.id 很长):

Collection&lt;Coupon&gt; findByCustomer_IdAndUsedOnIsNull(Long customerId);

然后像这样使用:

repo.findByCustomer_IdAndUsedOnIsNull(customer.getId());

【讨论】:

【参考方案2】:

我的错,正确的定义是

@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> 
     Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);

我只是错过了参数名称:-(

【讨论】:

哇哈哈至少这篇文章帮助我找到了如何使用“IsNull”【参考方案3】:

您可以使用 IsNull 来检查 JPA 查询中的空列。

例如,对于任何 columnA,您可以编写 query like query like

findByColumnAIsNull

在这种情况下,您可以编写如下查询

@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> 
 Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
 List<Coupon> findByUsedOnIsNull();

您还可以检查此查询的方式 请参阅此 Spring Data JPA 查询创建,这将帮助您理解和创建不同类型的 JPA 查询变体。

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

【讨论】:

Nikunj Undhad,虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。 Answers that are little more than a link may be deleted. @Shree,我用完整的描述更新了答案,你认为现在每个面临这个问题的人都可以理解吗?

以上是关于列为空的 Spring 数据查询的主要内容,如果未能解决你的问题,请参考以下文章

jeecg 导入excel 怎么读取第一列为空的数据

MySQL:选择列为空的行

用 INSERT 语句 向数据库 插入 可以为空的 INT型数据

为啥判断队列是不是为空时只需比较队首指示和队尾指示是不是相等即可?

ms 访问 - 当我在 vba 中选择查询时,列为空

获取MYSQL中某列为空的表中的值