我是 JPA 和 JPQL 的新手。我正在尝试查询数据库,从一个表中获取行,该表主要包含其他表中包含的名称的索引。
这是我正在尝试重新创建的 mysql 中的查询:
SELECT COUNT(*) as PieceCount,
shifttimes.shiftid as ShiftId,
specienames.NameText as SpecieName,
gradenames.NameText as Grade,
DryerNum,
CreatedLocal
from sheets, shifttimes, specienames, gradenames
WHERE sheets.ShiftIndex = shifttimes.ShiftIndex AND
sheets.SpecieNameIndex = specienames.NameIndex AND
sheets.gradenameindex = gradenames.NameIndex AND
CreatedLocal >= '" . $begin . $StartGraveyard
' AND CreatedLocal < '" . $end . $StartGraveyard
GROUP BY ShiftId, SpecieName, Grade, DryerNum;
这是我的查询,据我所知:
SELECT COUNT(s.createdLocal),
g.nameText gName,
p.nameText pName
FROM Sheets s , GradeNames g , SpecieNames p
JOIN s.gradeNameIndex gIndex ,
JOIN s.specieNameIndex pIndex
WHERE gIndex = g.nameIndex AND
pIndex = p.nameIndex
GROUP BY gName , pName
这是我收到的 Java Glassfish 错误:
java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager:
Exception Description: Syntax error parsing [SELECT COUNT(s.createdLocal), g.nameText, p.nameText FROM Sheets s , GradeNames g , SpecieNames p JOIN s.gradeNameIndex gIndex , JOIN s.specieNameIndex pIndex WHERE gIndex = g.nameIndex AND pIndex = p.nameIndex GROUP BY g.nameText , p.nameText].
[128, 128] The range variable declaration must be specified.
最佳答案
首先,抱歉,但这不是答案,而是大评论......
您最好停止使用此语法 FROM Sheets s , GradeNames g , SpecieNames p
。
您需要的所有表都应该通过 ON
子句进行正确的 JOIN
编辑。
任何 JOIN
语句都应有 ON
子句,并且末尾不应有 ,
任何逗号。
如果我正确理解你的第二个查询,它一定是这样的:
SELECT COUNT(s.createdLocal),
g.nameText gName,
p.nameText pName
FROM Sheets s
JOIN GradeNames g
ON s.gradeNameIndex = g.nameIndex
JOIN SpecieNames p
ON s.specieNameIndex = p.nameIndex
GROUP BY gName , pName
关于java - 如何在 jpa 和 jpql 中联接多个表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32911635/