2016-10-19 8 views
2

문제 : 그것은 발생하는 executeQuery 의 위해 NamedParameters 내 컬렉션 세트를 사용하려고 : java.lang.ClassCastException가 java.util.LinkedHashSet이 될 수 없다 java.lang.Long에 캐스트Grails 3.1.11의 버그입니까? 내가하는 executeQuery 내 컬렉션 세트를 사용하고 있는데이 java.lang.ClassCastException가 발생

세트를 데이터 유형 목록으로 변환 할 수 있지만 Grails 2.2.3에서 발생하지 않은 것으로 보이는 이유는 지금 이것이 왜 Grails 3.1.11에서 발생했는지 궁금합니다. 이것이 Grails 3.1.11의 진정한 버그입니까? 괄호 안에 IDS : 스택의

// A Mocked up Domain 
class AccountExample { 
    Long id 
    String name 
} 
//Code that works 
List idList = [2L, 3L, 5L, 7L, 11L, 13L] 
List accountNameList = AccountExample.executeQuery(
    "SELECT name FROM AccountExample WHERE id IN :ids", 
    [ids:idList] 
) 
//Code that fails in Grails 3.1.11 but not in Grails 2.2.3 
Set idSet = [2L, 3L, 5L, 7L, 11L, 13L] 
List accountNameList = AccountExample.executeQuery(
    "SELECT name FROM AccountExample WHERE id IN :ids", 
    [ids:idSet] 
) 

일부는

Caused by ClassCastException: java.util.LinkedHashSet cannot be cast to java.lang.Long 
->> 36 | unwrap   in org.hibernate.type.descriptor.java.LongTypeDescriptor 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
|  63 | doBind   in org.hibernate.type.descriptor.sql.BigIntTypeDescriptor$1 
|  90 | bind . . . . . . in org.hibernate.type.descriptor.sql.BasicBinder 
| 286 | nullSafeSet  in org.hibernate.type.AbstractStandardBasicType 
| 281 | nullSafeSet . . in  '' 
|  67 | bind    in org.hibernate.param.NamedParameterSpecification 
| 616 | bindParameterValues in org.hibernate.loader.hql.QueryLoader 
| 1901 | prepareQueryStatement in org.hibernate.loader.Loader 
| 1862 | executeQueryStatement in  '' 
| 1839 | executeQueryStatement in  '' 
| 910 | doQuery . . . . in  '' 
| 355 | doQueryAndInitializeNonLazyCollections in  '' 
| 2554 | doList . . . . . in  '' 
| 2540 | doList   in  '' 
| 2370 | listIgnoreQueryCache in  '' 
| 2365 | list    in  '' 
| 497 | list . . . . . . in org.hibernate.loader.hql.QueryLoader 
| 387 | list    in org.hibernate.hql.internal.ast.QueryTranslatorImpl 
| 236 | performList . . in org.hibernate.engine.query.spi.HQLQueryPlan 
| 1300 | list    in org.hibernate.internal.SessionImpl 
| 103 | list . . . . . . in org.hibernate.internal.QueryImpl 
| 311 | doCall   in org.grails.orm.hibernate.AbstractHibernateGormStaticApi$_executeQuery_closure12 
| 196 | doExecute . . . in org.grails.orm.hibernate.GrailsHibernateTemplate 
| 140 | execute   in  '' 
| 110 | execute . . . . in  '' 
| 303 | executeQuery  in org.grails.orm.hibernate.AbstractHibernateGormStaticApi 
| 892 | executeQuery . . in org.grails.datastore.gorm.GormStaticApi 
| 1026 | executeQuery  in org.grails.datastore.gorm.GormEntity$Trait$Helper 
+0

의 버그로 인정했다, 당신은 단지 Grails의 프로젝트 등을 제출 더 나을 수 있습니다. 알고있는 사람이 SO보다 더 빨리 보일 것입니다. https://github.com/grails/grails-core/issues – Gregg

답변

1

가 함께 시도 추적. 이 버그 생각한다면

List accountNameList = AccountExample.executeQuery(
    "SELECT name FROM AccountExample WHERE id IN (:ids)", 
    [ids:idList] 
) 
+0

괄호 추가 시도 ... 여전히 java.util.LinkedHashSet은 java.lang.Long으로 캐스팅 될 수 없습니다 –

+0

나중에 grails 버전에서 사용해 보겠습니다. 너를 알게 될거야. – quindimildev