Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA,JPQL:意外标记:在第1行附近左侧_Java_Jpa_Jpql - Fatal编程技术网

Java JPA,JPQL:意外标记:在第1行附近左侧

Java JPA,JPQL:意外标记:在第1行附近左侧,java,jpa,jpql,Java,Jpa,Jpql,我想使用以下参数显示所有未应答和未应答的检查表。应答检查表位于ResponseCheckLists表中:idequipement和idMission @Query("SELECT check,resp,eq FROM Equipements eq INNER JOIN CheckLists check WHERE eq.idEquipements = check.equipements.idEquipements LEFT JOIN ResponsesCheckLists resp ON che

我想使用以下参数显示所有未应答和未应答的检查表。应答检查表位于ResponseCheckLists表中:idequipement和idMission

@Query("SELECT check,resp,eq FROM Equipements eq INNER JOIN CheckLists check WHERE eq.idEquipements = check.equipements.idEquipements LEFT JOIN ResponsesCheckLists resp ON check.idCheckLists=resp.CheckLts.idCheckLists AND resp.Respmission.idMission = :idmiss WHERE eq.idEquipements = :idEqp ")
    public List<ResponsesCheckLists> ListCheckListsNonRepondu(@Param("idEqp") long idEqp, @Param("idmiss") long idmiss);
编辑1:

Edit1错误

原因:java.lang.IllegalStateException:节点没有数据类型: org.hibernate.hql.internal.ast.tree.IdentNode+-[IDENT]IdentNode: '检查'{originalText=check}

antlr.SemanticException:应为join提供路径

原因:java.lang.IllegalArgumentException:的验证失败 查询方法public abstract java.util.List com.SSC.DAO.JPARepository.responseCheckListsrepository.ListCheckListsNonRepository长,长

编辑2:

Edit2的错误:

原因:java.lang.IllegalStateException:节点没有数据类型: org.hibernate.hql.internal.ast.tree.IdentNode+-[IDENT]IdentNode: '检查'{originalText=check} antlr.SemanticException:应为join提供路径

如何更正此查询


提前感谢您

您在那里有一个指定JPQL查询的Spring注释@Query。您的JPQL查询应该遵循语法和JPA规范。遗憾的是,您没有遵循这些

SELECT {result} FROM {from} WHERE {where} ...
任何连接都必须进入FROM子句。您已经在FROM子句中加入了一个联接,但是出于您所知的原因,您决定在WHERE子句中加入另一个联接!!事实上,你有两个WHERE子句


因为您没有发布实体,所以无法告诉您查询应该是什么,所以我们看不到它们之间有什么关系,甚至看不到您试图实现什么。我们只能指出您的错误

您是在尝试执行本机查询还是JPQL查询?我想在JPQL中执行查询WHERE子句中不允许使用LEFT JOIN。WHERE子句是JPQL中查询的一般条件。如何解决这个问题?谢谢有人可以帮助meI尝试根据链接修改请求。但我有另一种错误。我更新了帖子@Neil StocktonAs链接说,任何连接都必须沿着关系,因为JPQL是一种伪面向对象查询语言。正如我上面所说,您没有发布您拥有的实体/字段,因此只有您知道哪里存在关系。问题是,我在JPQL中有3个表的连接。我不知道如何确保加入他们@Neil StocktonA JOIN的关系良好。没有好的连接或坏的连接,只有有效的连接,只有你知道你的关系在哪里,所以这里没有更多要说的。解释应用程序的结果。根据用户提供的IDEEquipment(例如:1)和idMission(例如:2),有必要列出所有已回答和尚未回答的检查表。台式设备;包含idEquipment、Name、。。表检查列表:包含IDChecklist、Recommension、idEquipment ResponseCheckList:包含IDResponseCheckList、IDChecklist、date、Response、idMission。所以,你必须在3张桌子之间做焦距。
@Query("SELECT check,resp,eq FROM Equipements eq INNER JOIN CheckLists check ON eq.idEquipements = check.equipements.idEquipements"
            + " INNER JOIN ResponsesCheckLists resp ON check.idCheckLists=resp.CheckLts.idCheckLists AND resp.Respmission.idMission = :idmiss AND eq.idEquipements = :idEqp ")
    public List<ResponsesCheckLists> ListCheckListsNonRepondu(@Param("idEqp") long idEqp, @Param("idmiss") long idmiss);
@Query("SELECT check , resp , eq FROM Equipements eq INNER JOIN CheckLists check ON eq.idEquipements = check.equipements.idEquipements"
            + " INNER JOIN ResponsesCheckLists resp ON check.idCheckLists=resp.CheckLts.idCheckLists AND resp.Respmission.idMission = :idmiss AND eq.idEquipements = :idEqp ")
    public List<ResponsesCheckLists> ListCheckListsNonRepondu(@Param("idEqp") long idEqp, @Param("idmiss") long idmiss);
SELECT {result} FROM {from} WHERE {where} ...