Spring 列为空的数据查询
Spring data query where column is null
假设我有实体(getters/setters 为简洁起见省略了各种细节):
@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;
}
我希望检索具有空 usedOn 的给定客户的所有优惠券。
我在 CouponRepository 中定义方法失败,如 docs
中所述
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer);
}
但这会导致编译器错误 Syntax error, insert "... VariableDeclaratorId" to complete FormalParameterList
。
尝试将您的方法更改为此(假设 Customer.id
是长整数):
Collection<Coupon> findByCustomer_IdAndUsedOnIsNull(Long customerId);
然后像这样使用:
repo.findByCustomer_IdAndUsedOnIsNull(customer.getId());
我的错,正确的定义是
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
}
我只是错过了参数名称:-(
您可以使用 IsNull 检查 JPA 查询中的空列。
例如,对于任何 columnA,您可以编写类似
的查询
findByColumnAIsNull
在这种情况下,您可以编写如下查询
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
List<Coupon> findByUsedOnIsNull();
}
您还可以查看此查询的方式
请参阅此 Spring 数据 JPA 查询创建,这将帮助您理解和创建不同类型的 JPA 查询变体。
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
假设我有实体(getters/setters 为简洁起见省略了各种细节):
@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;
}
我希望检索具有空 usedOn 的给定客户的所有优惠券。 我在 CouponRepository 中定义方法失败,如 docs
中所述@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer);
}
但这会导致编译器错误 Syntax error, insert "... VariableDeclaratorId" to complete FormalParameterList
。
尝试将您的方法更改为此(假设 Customer.id
是长整数):
Collection<Coupon> findByCustomer_IdAndUsedOnIsNull(Long customerId);
然后像这样使用:
repo.findByCustomer_IdAndUsedOnIsNull(customer.getId());
我的错,正确的定义是
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
}
我只是错过了参数名称:-(
您可以使用 IsNull 检查 JPA 查询中的空列。
例如,对于任何 columnA,您可以编写类似
的查询findByColumnAIsNull
在这种情况下,您可以编写如下查询
@Repository
public interface CouponRepository extends CrudRepository<Coupon, Long> {
Collection<Coupon> findByCustomerAndUsedOnIsNull(Customer customer);
List<Coupon> findByUsedOnIsNull();
}
您还可以查看此查询的方式
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation