2016-11-26 1 views
0

간단한 사용자 정의 엔티티 집합 인 속성을 선택하려고하지만 애매한 예외가 발생합니다. 여기스프링 데이터 Jpa 새로운 문제 선택

public class AdminRole { 

     private String name; 
     private Set<AdminRole> adminRoles; 

} 

ar.adminRoles가 Set<AdminRole> adminRoles입니다 :

@Query("SELECT new com.my.package.MyModel(ar.name, ar.adminRoles) " + 
      " FROM AdminRole ar ") 

이 내 클래스입니다. 내 생성자가 정확하며 MyModel (ar.name)을 검색하려는 경우 제대로 작동합니다. 그것은 생성자에서 SET 전달에 문제가있는 것, 당신은 그 문제를 해결하는 방법을 알고 있습니까?

ERROR :

Caused by: org.hibernate.exception.SQLGrammarException: could not extract ResultSet 
    at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:63) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:42) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:109) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:95) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:79) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.getResultSet(Loader.java:2117) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1900) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.executeQueryStatement(Loader.java:1876) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.doQuery(Loader.java:919) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:336) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.doList(Loader.java:2617) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.doList(Loader.java:2600) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2429) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.Loader.list(Loader.java:2424) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:501) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:371) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:216) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1326) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.internal.QueryImpl.list(QueryImpl.java:87) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.jpa.internal.QueryImpl.list(QueryImpl.java:606) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final] 
    at org.hibernate.jpa.internal.QueryImpl.getResultList(QueryImpl.java:483) ~[hibernate-entitymanager-5.0.11.Final.jar:5.0.11.Final] 
    at org.springframework.data.jpa.repository.query.JpaQueryExecution$CollectionExecution.doExecute(JpaQueryExecution.java:118) ~[spring-data-jpa-1.10.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.query.JpaQueryExecution.execute(JpaQueryExecution.java:82) ~[spring-data-jpa-1.10.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.doExecute(AbstractJpaQuery.java:114) ~[spring-data-jpa-1.10.3.RELEASE.jar:na] 
    at org.springframework.data.jpa.repository.query.AbstractJpaQuery.execute(AbstractJpaQuery.java:104) ~[spring-data-jpa-1.10.3.RELEASE.jar:na] 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.doInvoke(RepositoryFactorySupport.java:482) ~[spring-data-commons-1.12.3.RELEASE.jar:na] 
    at org.springframework.data.repository.core.support.RepositoryFactorySupport$QueryExecutorMethodInterceptor.invoke(RepositoryFactorySupport.java:460) ~[spring-data-commons-1.12.3.RELEASE.jar:na] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor.invoke(DefaultMethodInvokingMethodInterceptor.java:61) ~[spring-data-commons-1.12.3.RELEASE.jar:na] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:99) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:281) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:96) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) ~[spring-aop-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    at org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136) ~[spring-tx-4.3.3.RELEASE.jar:4.3.3.RELEASE] 
    ... 63 common frames omitted 
Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-104, SQLSTATE=42601, SQLERRMC=from;select . as col_0_0_;JOIN, DRIVER=4.21.29 
    at com.ibm.db2.jcc.am.kd.a(kd.java:810) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.kd.a(kd.java:66) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.kd.a(kd.java:140) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.sp.c(sp.java:2796) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.sp.d(sp.java:2784) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.sp.a(sp.java:2212) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.tp.a(tp.java:7997) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.t4.bb.i(bb.java:148) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.t4.bb.b(bb.java:41) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.t4.p.a(p.java:32) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.t4.vb.i(vb.java:145) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.sp.kb(sp.java:2181) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.tp.yc(tp.java:3698) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.tp.a(tp.java:4578) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.tp.b(tp.java:4173) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.tp.lc(tp.java:770) ~[db2jcc4.jar:na] 
    at com.ibm.db2.jcc.am.tp.executeQuery(tp.java:735) ~[db2jcc4.jar:na] 
    at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70) ~[hibernate-core-5.0.11.Final.jar:5.0.11.Final] 
    ... 93 common frames omitted 
+0

JPQL SELECT 절에서 다중 값 필드를 선택할 수 없습니다. JPA 스펙은 매우 명확합니다. –

+0

의견을 수락 할 수 있도록 답변으로 게시 할 수 있습니까? –

답변

0

JPQL SELECT 절에서 다중 값 필드를 선택할 수 없습니다. JPA 스펙은 매우 명확합니다. 다음은 해당 부분입니다. JPQL BNF

1

당신은 모든 역할에 부착 rolde의 목록이있는 역할 이름을 검색 할이 시도. 그것은 조인 없이는 불가능합니다. 이것은 SQL 예외입니다. AdminRole과 The adminRoles's entity 사이에 조인을하면됩니다.

+0

죄송합니다. 내가 틀 렸습니다. ar.adminRoles는 입니다. 나는 그 질문을 갱신했다. 이 경우 내가 무엇을 할 수 있는지 아십니까? –