我的实体类看起来像这样
public class EntityClass extends AbstractEntity {
@ElementCollection(fetch = FetchType.LAZY, targetClass=java.lang.String.class)
@CollectionTable(name = "entity_properties", joinColumns = @JoinColumn(name = "p_id"))
@MapKeyColumn(name = "propertyKey")
@Column(name = "propertyValue")
private Map<String, String> properties;
}
和资源类一样
public class Response {
private Map<String, String> properties
@QueryProjection
public Response (Map<String, String> properties) {
this.properties = properties;
}
}
像这样的Repository Imp类
public class EntityClassRepositoyImpl {
public Response getReponse(Long id){
QEntityClass entiryClass = QEntityClass.entityClass;
return from(entiryClass)
.where(entiryClass.id.eq(id)
.uniqueResult(new QResponse(
entiryClass.properties
));
}
}
当调用Repository方法时,它会抛出异常
引起:java.lang.IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:paymentRequestResponse靠近第1行,第219栏[select paymentRequestResponse.amount,paymentRequestResponse.narration,paymentRequestResponse.requestUniqueId,paymentRequestResponse。 channel,paymentRequestResponse.transactionStatus,paymentRequestResponse.created,paymentRequestResponse.properties 来自com.esewa.payment.log.PaymentRequestResponse paymentRequestResponse 其中paymentRequestResponse.kernelEntryId =?1和paymentRequestResponse.accountId =?2] 在org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750)〜[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677)〜[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683)〜[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:331)〜[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.8.0_74] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:1.8.0_74] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.8.0_74] 在java.lang.reflect.Method.invoke(Method.java:498)〜[na:1.8.0_74] 在org.springframework.orm.jpa.ExtendedEntityManagerCreator $ ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:344)〜[spring-orm-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在com.sun.proxy。$ Proxy119.createQuery(未知来源)〜[na:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.8.0_74] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:1.8.0_74] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.8.0_74] 在java.lang.reflect.Method.invoke(Method.java:498)〜[na:1.8.0_74] 在org.springframework.orm.jpa.SharedEntityManagerCreator $ SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:293)〜[spring-orm-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在com.sun.proxy。$ Proxy119.createQuery(未知来源)〜[na:na] 在com.mysema.query.jpa.impl.AbstractJPAQuery.createQuery(AbstractJPAQuery.java:129)〜[querydsl-jpa-3.7.1.jar:na] 在com.mysema.query.jpa.impl.AbstractJPAQuery.uniqueResult(AbstractJPAQuery.java:311)〜[querydsl-jpa-3.7.1.jar:na] 在com.mysema.query.jpa.impl.AbstractJPAQuery.uniqueResult(AbstractJPAQuery.java:304)〜[querydsl-jpa-3.7.1.jar:na] 在com.esewa.payment.log.PaymentRequestResponseRepositoryImpl.findByKernelEntryId(PaymentRequestResponseRepositoryImpl.java:83)〜[main /:na] 在com.esewa.payment.log.PaymentRequestResponseRepositoryImpl $$ FastClassBySpringCGLIB $$ 1f16680.invoke()〜[main /:na] 在org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)〜[spring-core-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在org.springframework.aop.framework.CglibAopProxy $ CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)〜[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] 在org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)〜[spring-aop-4.2.4.RELEASE.jar:4.2.4.RELEASE] at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)〜[spring-tx-4.2.4.RELEASE.jar:4.2.4.RELEASE] ...省略了119个常用帧 引起:org.hibernate.hql.internal.ast.QuerySyntaxException:意外令牌:paymentRequestResponse靠近第1行,第219栏[select paymentRequestResponse.amount,paymentRequestResponse.narration,paymentRequestResponse.requestUniqueId,paymentRequestResponse.channel,paymentRequestResponse.transactionStatus,paymentRequestResponse.created ,paymentRequestResponse.properties 来自com.esewa.payment.log.PaymentRequestResponse paymentRequestResponse 其中paymentRequestResponse.kernelEntryId =?1和paymentRequestResponse.accountId =?2] 在org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:304)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:203)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.query.spi.HQLQueryPlan。(HQLQueryPlan.java:131)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.query.spi.HQLQueryPlan。(HQLQueryPlan.java:93)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1836)〜[hibernate-core-4.3.11.Final.jar:4.3.11.Final] 在org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)〜[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] ...省略了140个常见帧