繁体   English   中英

如何在jpa和jpql中加入多个表列

[英]How can I JOIN multiple table columns in jpa and jpql

我是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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM