Вставка данных в одну таблицу с использованием HQL в Hibernate
Я читал учебник Hibernate HQL и обнаружил, что HQL не поддерживает INSERT INTO..VALUES..
, но INSERT INTO..SELECT..
i.e. HQL поддерживает только вставку из другой таблицы.
Предположим, что я хочу вставить одинаковые значения в одну таблицу и что данные не из какой-либо другой таблицы, то есть значения не находятся в какой-либо другой таблице. Тогда как я могу это сделать в HQL?
Кроме того, хотелось бы знать рациональность таких ограничений в HQL?
Ответы
Ответ 1
Вам не нужно использовать hql для вставки, если данные из другой таблицы.
Просто получите ссылку на свою сущность, получите сеанс Hibernate и вызовите save().
Согласно http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch04.html#d0e2116
Псевдо-синтаксис для операторов INSERT
INSERT INTO EntityName properties_list select_statement
Поддерживается только форма INSERT INTO... SELECT.... Вы не можете указать явные значения для вставки.
Ответ 2
Hibernate - это структура ORM (объектно-реляционное сопоставление).
Его задача состоит в том, что вы передаете объекты (объекты), и он управляет хранилищем (через Session.save()
, IIRC).
Итак, вы не используете HQL для вставки новых записей, но используете методы ORM.
И (это предположение), с другой стороны, поскольку загрузка сущностей из таблицы, копирование их на другие объекты и сохранение их по одному происходит медленно, HQL обеспечивает ярлык SQL в базе данных только для этого конкретного для повышения производительности.
Ответ 3
Вы можете использовать session.save(object)
для вставки данных в таблицы.