CrudRepository按一对多关系筛选



我有两个实体客户和订单:

@Entity
public class Customer {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
.....
@OneToMany(mappedBy="customer")
private Set<Order> orders = new HashSet<Order>();
.....
}
@Entity
public class Order {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
........
@ManyToOne()
private Customer;
........
}

CrudRepository中,我想找到所有没有订单的客户。如何编写@Query?或者如何在CrudRepository接口中编写方法?

@Repository
public interface CustomerRepository extends CrudRepository<Customer, Long>{
findBy ......
@Query(".......")
find.....
}

谢谢!

您需要使用empty关键字,该关键字可以与集合表达式一起使用(无需联接(。

JPQL查询将是

select c from Customer c where c.orders is empty 

要查询不存在的数据,必须使用left join,这样做:

@Query("select c from Customer as c left join c.orders as orders where orders is null")

最新更新