MySQL / Hibernate SQLQuery如何将unsigned int(10)转换为smallint?

问题描述 投票:0回答:2

我有以下sql查询

final String GET_ASSIGNMENT_STATUS = 
    "select wtd.work_task_detail_id as workTaskDetailId, "
    + "a.code_name as workTaskStatusName, a.code_id as workTaskStatusId, "
    + "from work_task_detail wtd "
    ... JOINS
    + "where wtd.work_task_detail_id = :assignmentId";
assignmentStatus = ( AssignmentStatus ) session.createSQLQuery(GET_ASSIGNMENT_STATUS)
            .setResultTransformer( Transformers.aliasToBean( AssignmentStatus.class ) )
            .setInteger("assignmentId", assignmentId).uniqueResult();

在那个查询中,我选择了一个列a.code_id as workTaskStatusId,它是数据库中的unsigned int(10)和Java端的Short。 在执行该查询时,我在setterMethod()处获得异常,它将Short作为输入参数(我可以更改)。

但我想在sql端转换/转换它。 如何在qql查询中将unsigned int(10)强制转换为smallint

我试过了

cast(a.code_id as smallint) as workTaskStatusId,

但它在smallint附近给了我sql错误

java mysql hibernate
2个回答
0
投票

在MySQL中,您可以将CASTCONVERT仅限于以下类型:

  • BINARY [(N)]
  • CHAR [(N)]
  • NCHAR [(N)]
  • JSON
  • 日期
  • 约会时间
  • DECIMAL [(M [,d])]
  • 签名[INTEGER]
  • 时间
  • UNSIGNED [INTEGER]

......按照the documentation


0
投票

您是否尝试使用本机查询?

我认为数据库和/或HQL不知道smallint因为它不是为每种数据库调用smallint。而且,由于您似乎正在尝试仅为特定类型的数据库(如Oracle或其他类似)实现查询,因此最好使用本机查询。您正在尝试使用数据库的特定功能将其作为smallint。你为什么要这样做?是否可以选择存储在数据库中的值?否则也许它不是正确的,因为你知道你需要一个小小的,而且在它很长之前。类型转换始终是代码的关键部分。

© www.soinside.com 2019 - 2024. All rights reserved.