【发布时间】:2016-12-31 10:10:51
【问题描述】:
鉴于我的 SQL 查询如下:
SELECT
maker_code
FROM
maker
WHERE
part_no = p_part_no
AND effect_date_in <= TODAY
AND effect_date_out > TODAY
AND effect_date_in = (SELECT MAX(effect_date_in) FROM maker WHERE part_no =p_part_no)
我想将 Spring Data JPA 与 findBy---() 等内置方法一起使用,这将返回与上述 sql 查询相同的结果
我试过 JPQL 查询:
@Query(value = "
SELECT p FROM Pg6p0012_01PurpartQueryModel p where p.partNo = :p_part_no AND
p.effectDateIn <= TODAY AND p.effectDateOut > TODAY AND p.effectDateIn =
(
select max(p.effectDateIn)from Pg6p0012_01PurpartQueryModel where partNo =:p_part_no)"
)
public List<Pg6p0012_01PurpartQueryModel>findByPartNo(@Param("p_part_no") String p_part_no);
但我收到一个错误: 在这种情况下对聚合的使用不当。
【问题讨论】:
-
问题出在哪里?您对 JPQL 的哪一部分有疑问?你试过什么?你的错误在哪里?
-
@Neil Stockton 我已经编辑了问题
-
JPA API 没有像“findBy...”这样的“内置函数”。如果您没有意识到这一点,请阅读 JPA 规范。您大概指的是 SPRING DATA JPA ...不是 JPA API。了解您首先使用什么技术
-
没错,我正在使用 SPRING DATA JPA。有没有办法使用 SPRING DATA JPA 内置函数来实现上述结果。
-
即使有办法,您最终也会得到一个 250 个字符长的方法名称,而您真的不希望这样。从方法名称自动生成查询对于像 findByName() 这样的简单查询很好。它们不好,也不打算用于复杂的查询。使用任何方法名称,并使用
@Query对其进行注释,您将在其中定义标准 JPQL 查询。
标签: java spring spring-data-jpa