如何将这个sql转换成jpa?

hc2pp10m  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(412)

sql为列表。

select * from product_spu where (spu_code,version) in (("code1", 1),("code2", 2));

我有产品\u spu实体,和一类 SpuCodeAndVersion .

@Data
private static final class SpuCodeAndVersion {
    private String spuCode;
    private int spuVersion;
}

但我不能这样写jpa:

List<ProductSpuEntity> findAllBySpuCodeInAndVersionIn(List<SpuCodeAndVersion> codeAndVersions);

我怎样才能改变它?

x33g5p2x

x33g5p2x1#

不幸的是,如果没有定制的jpa查询,这是无法实现的。
我用你提供的例子来解释。

select * from product_spu where (spu_code,version) in (("code1", 1),("code2", 2));

在自定义查询中可以实现相同的功能,如下所示:

@Query("select s from ProductSpu where (s.spuCode, s.version) in (:#{#codeAndVersion.spuCode}, :#{#codeAndVersion.spuVersion}")
ProductSpuEntity findAllBySpuCodeInAndVersionIn(SpuCodeAndVersion codeAndVersion);

现在您可以从循环执行这个查询,并传递对象并将结果存储在另一个列表中。
注意:这属于spring数据jpa1.7.2+,需要spring 4
有关更多信息,请参阅本文档:https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions

相关问题