Самый простой запрос SQL - это получить
список скаляров (значений).
sess.createSQLQuery("SELECT * FROM CATS").list();
sess.createSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS").list();
Они вернут список объектов
массивы (Object[]
) со скалярными значениями
для каждого столбца в таблице CATS.
Hibernate будет использовать ResultSetMetadata
вывести фактический порядок и типы
возвращенных скалярных значений.
Чтобы избежать накладных расходов на использование
ResultSetMetadata
, или просто быть
более явно в том, что возвращается, один
можно использовать addScalar()
:
sess.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME", Hibernate.STRING)
.addScalar("BIRTHDATE", Hibernate.DATE)
Указан этот запрос:
- строка запроса SQL
- столбцы и типы для возврата
Это вернет массивы объектов, но
сейчас не буду использовать
ResultSetMetadata
но будет вместо
явно получить идентификатор, имя и
BIRTHDATE столбец как соответственно
Длинный, Струнный и Короткий от
базовый набор результатов. Это также означает
что только эти три столбца будут
возвращается, даже если запрос
используя * и может вернуть больше, чем
три перечисленных столбца.
Можно не указывать тип
информация для всех или некоторых из
скаляры.
sess.createSQLQuery("SELECT * FROM CATS")
.addScalar("ID", Hibernate.LONG)
.addScalar("NAME")
.addScalar("BIRTHDATE")
По сути, это тот же запрос, что и
раньше, но сейчас ResultSetMetaData
используется для определения типа ИМЯ и
ДЕНЬ РОЖДЕНИЯ, где в качестве типа идентификатора
явно указано.
Как java.sql.Types
вернулся из
ResultSetMetaData
отображается на
Типы гибернации контролируются
Диалект. Если конкретный тип не
отображается или не приводит к
ожидаемый тип, можно
настроить его с помощью звонков
registerHibernateType
в
Dialect
.