Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.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 org.hibernate.hql.internal.ast.QuerySyntaxException:JPQL自定义查询中的路径“e.id”无效_Java_Spring Boot_Spring Data Jpa_Jpql - Fatal编程技术网

Java org.hibernate.hql.internal.ast.QuerySyntaxException:JPQL自定义查询中的路径“e.id”无效

Java org.hibernate.hql.internal.ast.QuerySyntaxException:JPQL自定义查询中的路径“e.id”无效,java,spring-boot,spring-data-jpa,jpql,Java,Spring Boot,Spring Data Jpa,Jpql,我可以尝试从子查询中获取计数,然后e.id显示为无效路径。我的问题很复杂,这就是为什么我陷入这个困境。如何解决这个错误任何人都知道 我正在使用SpringBoot和jpa存储库。使用@Query注释将查询写入存储库。我尝试过使用UNION,但它不支持JPA、JPQL查询。那么,使用JPQL custome查询的解决方案是什么呢。我在查询中使用了构造函数,因为我想在每行中添加3种类型的计数。这就是我采用基于构造函数的查询的原因 1.DTO 2.查询 @Repository public inter

我可以尝试从子查询中获取计数,然后e.id显示为无效路径。我的问题很复杂,这就是为什么我陷入这个困境。如何解决这个错误任何人都知道

我正在使用SpringBoot和jpa存储库。使用@Query注释将查询写入存储库。我尝试过使用UNION,但它不支持JPA、JPQL查询。那么,使用JPQL custome查询的解决方案是什么呢。我在查询中使用了构造函数,因为我想在每行中添加3种类型的计数。这就是我采用基于构造函数的查询的原因

1.DTO

2.查询

@Repository
public interface GroupsDao extends JpaRepository<Groups, Long> {

   @Query("SELECT new com.techavidus.networkingPhoniex.responseDTO.ManageGroupsDTO(g.group_id, " +
            "g.group_name, gt.group_type_id, gt.name, COUNT(e.id), COUNT(ee.id), COUNT(mgf.id), gs.name) " +
            "FROM Groups g LEFT JOIN MemberFollowGroups mgf LEFT JOIN mgf.groups gf ON gf.group_id = g.group_id " +
            "JOIN g.groupTypes gt LEFT JOIN g.primary_contact_member_id pm " +
            "LEFT JOIN g.secondary_contact_member_id sm LEFT JOIN g.groupStates gs " +
            "WHERE (pm.member_id=:memberId OR sm.member_id=:memberId) IN " +
            "(SELECT e FROM Events e LEFT JOIN e.eventRecurrence er LEFT JOIN e.groups eg ON eg.group_id = g.group_id WHERE e.startDate >=:todayDate) AND " +
            "(SELECT ee FROM Events ee LEFT JOIN ee.eventRecurrence er LEFT JOIN ee.groups eg ON eg.group_id = g.group_id WHERE ee.startDate <:todayDate) " +
            "GROUP BY g.group_id")
    List<ManageGroupsDTO> manageMyGroupList(LocalDate todayDate, Long memberId);
}

3.错误

Caused by: java.lang.IllegalArgumentException: Validation failed for query for method public abstract java.util.List com.techavidus.networkingPhoniex.dao.GroupsDao.manageMyGroupList(java.time.LocalDate,java.lang.Long)!
    at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:93) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.jpa.repository.query.SimpleJpaQuery.<init>(SimpleJpaQuery.java:63) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:76) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromQueryAnnotation(JpaQueryFactory.java:56) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:140) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:207) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:78) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lookupQuery(RepositoryFactorySupport.java:574) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$mapMethodsToQuery$1(RepositoryFactorySupport.java:567) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193) ~[na:1.8.0_241]
    at java.util.Iterator.forEachRemaining(Iterator.java:116) ~[na:1.8.0_241]
    at java.util.Collections$UnmodifiableCollection$1.forEachRemaining(Collections.java:1051) ~[na:1.8.0_241]
    at java.util.Spliterators$IteratorSpliterator.forEachRemaining(Spliterators.java:1801) ~[na:1.8.0_241]
    at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482) ~[na:1.8.0_241]
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[na:1.8.0_241]
    at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708) ~[na:1.8.0_241]
    at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:1.8.0_241]
    at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499) ~[na:1.8.0_241]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.mapMethodsToQuery(RepositoryFactorySupport.java:569) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lambda$new$0(RepositoryFactorySupport.java:559) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at java.util.Optional.map(Optional.java:215) ~[na:1.8.0_241]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.<init>(RepositoryFactorySupport.java:559) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:332) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:297) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.util.Lazy.getNullable(Lazy.java:212) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.util.Lazy.get(Lazy.java:94) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:300) ~[spring-data-commons-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:121) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    ... 42 common frames omitted
Caused by: java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'e.id' [SELECT new com.techavidus.networkingPhoniex.responseDTO.ManageGroupsDTO(g.group_id, g.group_name, gt.group_type_id, gt.name, COUNT(e.id), COUNT(ee.id), COUNT(mgf.id), gs.name) FROM com.techavidus.networkingPhoniex.model.Groups g LEFT JOIN com.techavidus.networkingPhoniex.model.MemberFollowGroups mgf LEFT JOIN mgf.groups gf ON gf.group_id = g.group_id JOIN g.groupTypes gt LEFT JOIN g.primary_contact_member_id pm LEFT JOIN g.secondary_contact_member_id sm LEFT JOIN g.groupStates gs WHERE (pm.member_id=:memberId OR sm.member_id=:memberId) IN (SELECT e FROM com.techavidus.networkingPhoniex.model.Events e LEFT JOIN e.eventRecurrence er LEFT JOIN e.groups eg ON eg.group_id = g.group_id WHERE e.startDate >=:todayDate) AND (SELECT ee FROM com.techavidus.networkingPhoniex.model.Events ee LEFT JOIN ee.eventRecurrence er LEFT JOIN ee.groups eg ON eg.group_id = g.group_id WHERE ee.startDate <:todayDate) GROUP BY g.group_id]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:718) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at sun.reflect.GeneratedMethodAccessor55.invoke(Unknown Source) ~[na:na]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_241]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_241]
    at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:368) ~[spring-orm-5.2.3.RELEASE.jar:5.2.3.RELEASE]
    at com.sun.proxy.$Proxy110.createQuery(Unknown Source) ~[na:na]
    at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87) ~[spring-data-jpa-2.2.4.RELEASE.jar:2.2.4.RELEASE]
    ... 71 common frames omitted
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Invalid path: 'e.id' [SELECT new com.techavidus.networkingPhoniex.responseDTO.ManageGroupsDTO(g.group_id, g.group_name, gt.group_type_id, gt.name, COUNT(e.id), COUNT(ee.id), COUNT(mgf.id), gs.name) FROM com.techavidus.networkingPhoniex.model.Groups g LEFT JOIN com.techavidus.networkingPhoniex.model.MemberFollowGroups mgf LEFT JOIN mgf.groups gf ON gf.group_id = g.group_id JOIN g.groupTypes gt LEFT JOIN g.primary_contact_member_id pm LEFT JOIN g.secondary_contact_member_id sm LEFT JOIN g.groupStates gs WHERE (pm.member_id=:memberId OR sm.member_id=:memberId) IN (SELECT e FROM com.techavidus.networkingPhoniex.model.Events e LEFT JOIN e.eventRecurrence er LEFT JOIN e.groups eg ON eg.group_id = g.group_id WHERE e.startDate >=:todayDate) AND (SELECT ee FROM com.techavidus.networkingPhoniex.model.Events ee LEFT JOIN ee.eventRecurrence er LEFT JOIN ee.groups eg ON eg.group_id = g.group_id WHERE ee.startDate <:todayDate) GROUP BY g.group_id]
    at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.hql.internal.ast.ErrorTracker.throwQueryException(ErrorTracker.java:93) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:278) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:155) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:600) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:709) ~[hibernate-core-5.4.10.Final.jar:5.4.10.Final]
    ... 78 common frames omitted

看起来你有点误解了查询机制

不应该有任何新的调用-jpa可以为您组装实体并选择新的。。。在我看来,设计上有缺陷。 如果您想要实现列表的返回类型,JpaRepository看起来是错误的——应该有类似JpaRepository的东西 @实体的ToString注释很可能是冗余的,因为@Data注释还包括.ToString方法创建afaik。 总结一下,尝试以下方法:

@Repository
public interface GroupsDao extends JpaRepository<ManageGroupsDTO, Long> {

   @Query("SELECT g.group_id, g.group_name, gt.group_type_id, gt.name, COUNT(e.id), COUNT(ee.id), COUNT(mgf.id), gs.name " +
            "FROM Groups g LEFT JOIN MemberFollowGroups mgf LEFT JOIN mgf.groups gf ON gf.group_id = g.group_id " +
            "JOIN g.groupTypes gt LEFT JOIN g.primary_contact_member_id pm " +
            "LEFT JOIN g.secondary_contact_member_id sm LEFT JOIN g.groupStates gs " +
            "WHERE (pm.member_id=:memberId OR sm.member_id=:memberId) IN " +
            "(SELECT e FROM Events e LEFT JOIN e.eventRecurrence er LEFT JOIN e.groups eg ON eg.group_id = g.group_id WHERE e.startDate >=:todayDate) AND " +
            "(SELECT ee FROM Events ee LEFT JOIN ee.eventRecurrence er LEFT JOIN ee.groups eg ON eg.group_id = g.group_id WHERE ee.startDate <:todayDate) " +
            "GROUP BY g.group_id")
    List<ManageGroupsDTO> manageMyGroupList(LocalDate todayDate, Long memberId);
}

如果你没有弄乱结果集的定位,应该用这种方式来修复。

但是在JPA中,在这个回购中,有更多的查询。那么,如何将repo视为jparepository呢?如果我进行两次repo,那么它们将给出如下错误:-不是托管类型:class com.techavidus.networkingPhoniex.responseDTO.managegroups。不会发生托管类型类错误,因为您忘记了用@Entity和相应的表引用注释dto。试着修复它,我已经有了这类组的实体。所以我为什么要为此创建新的实体。我希望3个字段显式地添加到DTO中,而其他字段可以自动从实体绑定到DTO。我怀疑jpa是否真的可以这样工作。如果您有一些嵌套的实体,您必须为每个实体使用单独的存储库接口,并且ManageGroupsTo应该是通过@OneToOne/@OneToMany关系的组实体字段,因此要使GroupsDao repo工作,您很可能应该遵循上面的步骤。
@Repository
public interface GroupsDao extends JpaRepository<ManageGroupsDTO, Long> {

   @Query("SELECT g.group_id, g.group_name, gt.group_type_id, gt.name, COUNT(e.id), COUNT(ee.id), COUNT(mgf.id), gs.name " +
            "FROM Groups g LEFT JOIN MemberFollowGroups mgf LEFT JOIN mgf.groups gf ON gf.group_id = g.group_id " +
            "JOIN g.groupTypes gt LEFT JOIN g.primary_contact_member_id pm " +
            "LEFT JOIN g.secondary_contact_member_id sm LEFT JOIN g.groupStates gs " +
            "WHERE (pm.member_id=:memberId OR sm.member_id=:memberId) IN " +
            "(SELECT e FROM Events e LEFT JOIN e.eventRecurrence er LEFT JOIN e.groups eg ON eg.group_id = g.group_id WHERE e.startDate >=:todayDate) AND " +
            "(SELECT ee FROM Events ee LEFT JOIN ee.eventRecurrence er LEFT JOIN ee.groups eg ON eg.group_id = g.group_id WHERE ee.startDate <:todayDate) " +
            "GROUP BY g.group_id")
    List<ManageGroupsDTO> manageMyGroupList(LocalDate todayDate, Long memberId);
}