【问题标题】:Spring data jpa, Native Query, returned wrong field typesSpring data jpa,Native Query,返回错误的字段类型
【发布时间】:2017-03-02 13:29:05
【问题描述】:

我的存储库中有以下本机查询方法:

@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 返回正确的类型。

【问题讨论】:

  • 我认为这与 Hibernate 没有太大关系。 JDBC 驱动程序将返回与数据库中的列类型对应的 Java 类型。为什么不能只使用 Java Integer?
  • @AlanHay。是的,你赖特。我看到数据库中的列类型是 Int 类型,即使实体 ID 也是 long 类型。这就是为什么我得到 Integer 而不是 long。

标签: java hibernate jpa spring-data-jpa jpa-2.0


【解决方案1】:

为了安全起见,我总是将数字类型转换为 Number,然后从中获取所需类型的值,因为 JDBC 驱动程序可以返回 IntegerLongBigDecimal 等,具体取决于关于数据库列的类型:

((Number) obj[0]).longValue()

当然,不要忘记检查null 如果列可以为空。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-26
    • 1970-01-01
    • 2015-01-11
    • 2021-11-06
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多