我的存储库中有以下本机查询方法:
@Query(value="SELECT appSub.ApplicationFormId as appFormId, appSub.profileId as profileId, "
+ "p.CASId as profileCASId, ps.programId as programId FROM [unicas_config].[dbo].ApplicationFormEarlyDecisionConfig appFormED "
+ "INNER JOIN [unicas_ux].[dbo].ApplicationSubmission appSub ON appFormED.ApplicationFormId = appSub.applicationFormId "
+ "INNER JOIN [unicas_ux].[dbo].Profile p ON appSub.profileId = p.id "
+ "INNER JOIN [unicas_ux].[dbo].ProgramSelected ps ON p.id=ps.ProfileId AND appSub.applicationFormId = ps.instanceId "
+ "WHERE appFormED.EarlyDecisionVerdictDate >=:fromDate AND appFormED.EarlyDecisionVerdictDate <:toDate "
+ "AND appSub.EarlyDecisionStatus='Applied Early Decision' "
+ "AND appSub.ApplicationStatus='Received' "
+ "AND ps.IsPaid =1 "
+ "ORDER BY appSub.ApplicationFormId",nativeQuery = true)
List<Object[]> getAllEarlyDecisionApplicantsWithPaidProgramsOnVerdictDate(@Param("fromDate") Date fromDate, @Param("toDate") Date toDate);
现在,我想映射返回的结果:
long appFormId = (Long)obj[0]
long profileId = (Long)obj[1]
long programId = (Long)obj[3]
当我这样做时,我得到了
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long
,因为Hibernate考虑使用这些Integer
类型的id而不是Long
。请告诉我如何以编程方式告诉Hibernate返回正确的类型。
最佳答案
为了安全起见,我总是将数字类型转换为Number
,然后从中获取所需类型的值,因为JDBC驱动程序可以根据类型返回Integer
,Long
,BigDecimal
等。数据库列:
((Number) obj[0]).longValue()
当然,如果列可为空,请不要忘记检查
null
。关于java - Spring Data JPA, native 查询,返回错误的字段类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42556809/