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

时间:2017-12-19 09:57:51

标签: java mysql hibernate

我有以下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 列,在Java中选择 unsigned int(10) Short侧。
在执行该查询时,我在 setterMethod() 处获得异常,其中Short作为输入参数(我可以更改)。

但我想在sql端转换/转换它 如何在SQL查询中将 unsigned int(10) 投射到 smallint

我试过

cast(a.code_id as smallint) as workTaskStatusId,

但它在smallint

附近给了我 sql错误

2 个答案:

答案 0 :(得分:0)

您是否尝试使用原生查询?

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

答案 1 :(得分:0)

在MySQL中,您可以CASTCONVERT只关注以下类型:

  • BINARY [(N)]
  • CHAR [(N)]
  • NCHAR [(N)]
  • JS​​ON
  • DATE
  • DATETIME
  • DECIMAL [(M [,D])]
  • 签名[INTEGER]
  • TIME
  • UNSIGNED [INTEGER]

...按照the documentation