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