【发布时间】:2022-08-15 21:05:48
【问题描述】:
我正在尝试为我更改的查询运行我的 gradle springboot 项目,但我无法找到我正在做的错误。谁能指出我在这方面做错了什么。
这是我创建的新课程
@Embeddable
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PartsByPartNumber {
String partNumber;
List<Part> parts;
}
这是我写的回购类中的查询
@Repository
public interface PartRepo
extends JpaRepository<Part, Integer>, JpaSpecificationExecutor<Part>, QueryByExampleExecutor<Part> {
......
@Query(\" SELECT new com.ge.digital.oa.moa.domain.PartsByPartNumber(p.partNumber, p) \"
+ \" FROM Part p \"
+ \" GROUP BY p.partNumber \")
public List<PartsByPartNumber> findByPartsByPartNumber();
}
但是当我运行 gradle bootrun 我得到这个错误
2022-08-12 12:16:55 [restartedMain] ERROR o.h.h.i.a.ErrorTracker.reportError - Unable to locate appropriate constructor on class [com.ge.digital.oa.moa.domain.PartsByPartNumber]. Expected arguments are: java.lang.String, com.ge.digital.oa.moa.domain.Part
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.ge.digital.oa.moa.domain.PartsByPartNumber]
2022-08-12 12:16:55 [restartedMain] ERROR o.h.h.i.a.ErrorTracker.reportError - Unable to locate appropriate constructor on class [com.ge.digital.oa.moa.domain.PartsByPartNumber]. Expected arguments are: java.lang.String, com.ge.digital.oa.moa.domain.Part
[cause=org.hibernate.PropertyNotFoundException: no appropriate constructor in class: com.ge.digital.oa.moa.domain.PartsByPartNumber]
org.hibernate.hql.internal.ast.DetailedSemanticException: Unable to locate appropriate constructor on class [com.ge.digital.oa.moa.domain.PartsByPartNumber]. Expected arguments are: java.lang.String, com.ge.digital.oa.moa.domain.Part
at org.hibernate.hql.internal.ast.tree.ConstructorNode.resolveConstructor(ConstructorNode.java:182) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.ast.tree.ConstructorNode.prepare(ConstructorNode.java:144) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.ast.HqlSqlWalker.processConstructor(HqlSqlWalker.java:1245) ~[hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExpr(HqlSqlBaseWalker.java:2366) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectExprList(HqlSqlBaseWalker.java:2232) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectClause(HqlSqlBaseWalker.java:1503) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:585) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:313) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:261) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:271) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:191) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:143) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:119) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:80) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:605) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:714) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:23) [hibernate-core-5.3.9.Final.jar:5.3.9.Final]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_251]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_251]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_251]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_251]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:350) [spring-orm-5.1.6.RELEASE.jar:5.1.6.RELEASE]
at com.sun.proxy.$Proxy175.createQuery(Unknown Source) [na:na]
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.validateQuery(SimpleJpaQuery.java:87) [spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.jpa.repository.query.SimpleJpaQuery.<init>(SimpleJpaQuery.java:63) [spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromMethodWithQueryString(JpaQueryFactory.java:76) [spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.jpa.repository.query.JpaQueryFactory.fromQueryAnnotation(JpaQueryFactory.java:56) [spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$DeclaredQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:142) [spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$CreateIfNotFoundQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:209) [spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.jpa.repository.query.JpaQueryLookupStrategy$AbstractQueryLookupStrategy.resolveQuery(JpaQueryLookupStrategy.java:79) [spring-data-jpa-2.1.6.RELEASE.jar:2.1.6.RELEASE]
at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.lookupQuery(RepositoryFactorySupport.java:566) [spring-data-commons-2.1.6.RELEASE.jar:2.1.6.RELEASE]
-
为什么不使用
@AllArgsConstructor? -
都是一样的。。也试过了
-
我不是休眠专家,但该错误表明它正在寻找具有签名
public PartsByPartNumber(String partnumber, Part part){}的构造函数。该构造函数不存在,因为您的 POJO 中没有Part字段。使用该签名创建一个构造函数,我敢打赌你会看到发生了什么。 -
那肯定是错误的,实体的类型与查询不匹配。在实体中执行
Part parts;(可能不是您想要的)或调整查询,我现在不知道,因为没有@XToY 关系注释。您应该显示Part类。 -
是的,我想查询结果映射到的模型是 String 和 List<Part> 但我不知道为什么它在寻找 String 和 Part 的构造函数,而在模型 PartsByPartNumber 我有一个 String 和 List<Part> 的构造函数
标签: java spring spring-boot hibernate