MySQL / Hibernate SQLQuery, как привести unsigned int (10) к smallint?

0

У меня следующий запрос 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 столбец a.code_id as workTaskStatusId который является unsigned int(10) внутри базы данных и Short на стороне Java.
Выполняя этот запрос, я получаю исключение в setterMethod() который принимает Short как входной параметр (который я могу изменить).

но я хочу преобразовать/бросить его на стороне sql.
Как мне smallint unsigned int(10) в smallint в sql-запросе?

Я пробовал делать

cast(a.code_id as smallint) as workTaskStatusId,

но это дало мне ошибку sql возле smallint

Теги:
hibernate

2 ответа

0
Лучший ответ

В MySQL вы можете использовать CAST и CONVERT только для следующих типов:

  • БИНАРНЫЙ [(N)],
  • СИМ [(N)],
  • NCHAR [(N)],
  • JSON
  • ДАТА
  • DATETIME
  • ДЕСЯТИЧНАЯ [(М [, D])]
  • ПОДПИСАНО [INTEGER]
  • ВРЕМЯ
  • UNSIGNED [INTEGER]

... согласно документации.

  • 0
    Спасибо за список, глядя на ваш ответ, я думаю, что мой вопрос дублируется,
0

Вы пытались использовать собственный запрос?

Я считаю, что база данных или HQL не знает smallint, потому что она не называется smallint для каждого типа базы данных. И, как кажется, вы пытаетесь реализовать запрос только для определенного типа базы данных (например, Oracle или что-то еще), лучше использовать собственный запрос. Вы пытаетесь использовать определенную функцию базы данных, чтобы получить ее как smallint. Почему вы хотите достичь этого? Нельзя ли выбрать значение, поскольку оно хранится в базе данных? В противном случае, возможно, это не будет правильно, потому что вы знаете, что хотите маленький интервал, и до того, как он был длинным. Преобразование типов всегда является важной частью кода.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню