Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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与对象一起在子句中使用_Java_Mysql_Jakarta Ee_Jpa_Jpql - Fatal编程技术网

Java JPA与对象一起在子句中使用

Java JPA与对象一起在子句中使用,java,mysql,jakarta-ee,jpa,jpql,Java,Mysql,Jakarta Ee,Jpa,Jpql,我在使用JPA时遇到了一个问题,更具体地说,是使用IN子句 我认为,最好的方法是向您展示我的代码: @NamedQueryname=Commande.findCustom,query=SELECT DISTINCT[myFields] +从命令c到哪里 +[一些标准]和 +从子表t中选择t.ID中的c.ID +其中t.IDX IN:param和[otherCriterias], 然后我从MySQL中得到一个错误: 您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解使用子表t1中

我在使用JPA时遇到了一个问题,更具体地说,是使用IN子句

我认为,最好的方法是向您展示我的代码:

@NamedQueryname=Commande.findCustom,query=SELECT DISTINCT[myFields] +从命令c到哪里 +[一些标准]和 +从子表t中选择t.ID中的c.ID +其中t.IDX IN:param和[otherCriterias], 然后我从MySQL中得到一个错误:

您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,了解使用子表t1中的“.ID”附近的正确语法,其中t1.IDX位于168' 我正在寻找回应,但找不到任何东西

我想删除一个IN子句,问题仍然是一样的,所以它不是一个重复使用的问题

my:param是通过使用Object.find方法获得的对象列表。如您所见,它返回ID168。但我似乎找不到问题所在

任何帮助都将不胜感激,谢谢

编辑:完整查询

@NamedQueryname=Commande.findCustom,query=SELECT DISTINCT c.idChargement,c.libelle, +c.CodeTransporter,c.reference,c.dateCreation,c.dateChargementPrevu, +c.日期验证费用,c.日期证明,c.代码目的地, +c.raisonSocialeDestinataire,c.adresseDestinataire,c.codePostalDestinataire, +c.villeDestinataire,c.paysDestinataire,c.contactDestinataire, +c.telephoneDestinataire,c.mailDestinataire,c.Poidsmande,c.nombreColis, +c.NombreUniteManute,c.TypeUniteManute,c.prendreRDV,c.Comments +从命令c到哪里 +c.idChargement=:idChargement和c.CodeTransporter=:CodeTransporter和 +c.dateCreation介于:DateFirst和:dateFin之间,以及 +c.idDernierStatut在从ListStatusCommande l中选择l.IDListStatusCommande中 +其中l.idStatut IN:idStatut和c.raisonSocialeDestinataire=:raisonSociale和 +c.adresestinataire=:adresestinataire和c.codeDestinataire=:codeDestinataire +和c.codepostalestinataire=:codePostal和c.villeDestinataire=:villeDestinataire +和c.paysDestinataire=:codePays 以及错误消息

您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获取可在“.idListStatutCommande FROM ListStatutCommande t1其中t1.IdStatut IN 168”附近使用的正确语法
当您从MYSQL而不是Hibernate得到错误时,您可以尝试找出实际生成的查询。要做到这一点,请使用p6spy之类的代理调用程序,然后一切都应该清楚。查查间谍。当您这样做时,请尝试自己调用生成的SQL并尝试修复它。当我在使用JPA的连接获取和其他东西时遇到一些麻烦时,我使用了这种方法。诊断此类问题非常有用。

好的,我找到了问题,然后找到了答案。谢谢@antoniosss,事实是我看错了查询的部分

错误就在这里:c.idDernierStatut在

事实上,这部分是外键。当你想搜索它的时候,你必须把它当作一个对象。因此,正确的形式是c.idDernierStatut.idListStatutCommande以获取ID


无论如何,谢谢你们两位抽出时间

你是以hibernate的形式运行它吗?@PrasadKharkar不,我不是,我用括号检查了问题,不是太多…我想说有点问题。ID不是INclause@Antoniossss我同意,但那又怎样?正如您在错误中所看到的,ID就在那里,我刚刚测试了MYSQL的响应消息,如果出现错误,则从错误点开始。不知道哪里出了问题很难。甚至我在学习jpql时也不得不遵循同样的方法。好建议。e的投票结果很好,你可以解决。它被称为路径表达式。在JPQL中,我们处理的是对象,而不是数据库表,这就是为什么必须使用对象属性进行遍历。快乐学习。@PrasadKharkar事实上我正在学习,这是一条有用的建议。非常感谢。