java - 如何在 jpa 和 jpql 中联接多个表列

标签 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.

最佳答案

首先,抱歉,但这不是答案,而是大评论......

您最好停止使用此语法 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/

相关文章:

java - Hibernate OneToOne 之间具有惰性行为的 PK

java - MySQL : Cannot delete or update a parent row: a foreign key constraint fails 中的@OneToMany 错误

mysql - MySQL 上的延迟作业 : 'This version of MySQL doesn' t yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

php - 区域子域

PHP - 一个查询中的 SQL 过滤器类别

jpa - 带有Querydsl的JPA谓词

java - 边框和网格布局

java - kademila end emule 库

java - @Put 图像映射

java - 设置从 .bat 文件调用 Web 服务的授权