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

时间:2015-10-02 16:25:20

标签: java mysql jpa 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.

1 个答案:

答案 0 :(得分:0)

首先,对不起,但这不是答案,而是大评论......

您最好停止使用此语法FROM Sheets s , GradeNames g , SpecieNames p

您需要的所有表格都应JOINON 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.util.logging.manager