Как мне написать hql запрос с приведением?
Мне нужно объединить 2 таблицы с помощью hql, обе имеют общий столбец, но table1
общий столбец integer
а также table2
общий столбец String
Например,
select a.id as id,a.name as name,b.address as address
from Personal as a,Home as b
where a.id=b.studid
Вот a.id
является integer
в то время как b.stduid
это string
, но данные обоих столбцов одинаковы.
Как я могу получить результат запроса, используя hql запрос?
3 ответа
HQL поддерживает CAST
(если база данных поддерживает это), вы можете использовать его:
select a.id as id,a.name as name,b.address as address
from Personal as a,Home as b
where cast(a.id as string) = b.studid
Смотрите также:
Вы действительно должны подумать, почему у вас есть необходимость объединять две сущности по свойствам разных типов. Скорее всего, это говорит о необходимости рефакторинга некоторых объектов, что может включать изменение типов данных для столбцов базовых таблиц БД. Если модель правильная, то не нужно будет крутить Hibernate.
Мне пришлось передать его в String вот так:
@Query( value = "select new com.api.models.DResultStatus("+
"cast(ds.demoId as java.lang.String),cast(ds.comp as java.lang.String),cast(ds.dc as java.lang.String),cast(be.buildUrl as java.lang.String)")
Просто заметил, что вы используете JPA, там вы не можете приводить или преобразовывать данные. На языке запросов можно сравнивать только значения одного типа! читать в http://download.oracle.com/javaee/5/tutorial/doc/bnbuf.html