【发布时间】:2019-10-01 02:18:38
【问题描述】:
我正在尝试转换以下 Oracle SQL(可行)
select sum(ct.some_count) from TABLE1 mc
inner join TABLE2 xref on mc.cnum = xref.cnum
inner join TABLE3 ct on xref.srt = ct.srt
inner join TABLE4 pc on pc.id = xref.id
where mc.CARD_NO = '111' and pc.code = '222';
关注 JPQL。
@Query("SELECT sum(ct.someCount) FROM Table1Entity mc " +
"inner join TABLE2Entity xref on mc.cnum = xref.cnum " +
"inner join TABLE3Entity ct on xref.srt = ct.srt " +
"inner join TABLE4Entity pc on pc.id = xref.id " +
"where mc.CARD_NO = :cardNumber and pc.code = :code")
long getTotalCount(@Param("cardNumber") String cardNumber, @Param("code") String code);
我收到以下异常。
QuerySyntaxException:意外令牌
我可以就我做错的事情寻求帮助吗?
我正在使用 Spring,这是我用于此查询的存储库。
@Repository(value = "someCountRepository")
public interface SomeCountRepository extends JpaRepository<Table3Entity, TableId> {
@Query("SELECT sum(ct.someCount) FROM Table1Entity mc " +
"inner join TABLE2Entity xref on mc.cnum = xref.cnum " +
"inner join TABLE3Entity ct on xref.srt = ct.srt " +
"inner join TABLE4Entity pc on pc.id = xref.id " +
"where mc.CARD_NO = :cardNumber and pc.code = :code")
long getTotalCount(@Param("cardNumber") String cardNumber, @Param("code") String code);
}
【问题讨论】:
-
JPQL 中的联接不是这样获得的。例如,
SELECT p FROM Person p INNER JOIN Address a ON p.addressId = a.id WHERE a.city='London'不正确,而SELECT p FROM Person p INNER JOIN p.address a WHERE a.city='London'是使用 JPQL 连接的正确方法。 -
@manish 查询怎么知道'a'是什么? -> INNER JOIN p.address a
-
JPA 使用对象。假设有一个
Person实体和一个Address实体,分别代表一个人和一个地址。如果某人需要地址,则Person实体必须有一个字段private Address address。然后,一个有效的 JPA 查询看起来像FROM Person p INNER JOIN p.address a。 JPA 提供者知道p.address是Address类型,因此,它会自动将别名a映射到Address实体映射到的任何表。从这个意义上说,JPA 查询确实看起来像 SQL,但它需要实体和字段而不是表和列。