简体   繁体   English

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

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

I'm new with JPA and JPQL. 我是JPA和JPQL的新手。 I'm trying to query a database grab rows from a table that contains mostly index's of the names contained in other tables. 我正在尝试从一个表中查询数据库抓取行,该表主要包含其他表中包含的名称的索引。

This is the query in mysql that I'm trying to recreate: 这是我要重新创建的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;

This is the query I have and as far as I've gotten: 这是我所查询到的查询:

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

This is the Java Glassfish error that I am receiving: 这是我收到的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.

First off all, sorry, but this is not an answer but BIG comment... 首先,很抱歉,但这不是答案,而是大评论...

You should better stop using this syntax FROM Sheets s , GradeNames g , SpecieNames p . 您最好停止在FROM Sheets s , GradeNames g , SpecieNames p使用此语法。

All tables you need should be properly JOIN ed by ON clause. 您需要的所有表都应通过ON子句正确地JOIN

Any JOIN statement should have ON clause and should not have , any comma at the end. 任何JOIN语句应该具有ON子句,不应该有,结尾处的逗号。

If I understood your 2nd query correctly it must be something like: 如果我正确理解了您的第二个查询,则必须类似:

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