Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > HQL INSERT


Автор: 17dufa 19.4.2011, 15:19
Добрый день,
можно ли как-то извернуться и таки обойти запрет на обычный INSERT INTO VALUES в HQL? то есть требуется при помощи HQL запроса вставить 1 запись.

Автор: LSD 19.4.2011, 15:59
Буква Q в абревиатуре HQL означает query, т.е. запросы и HQL вообще не включает никакой DML. Есть Native SQL, есть возможность получить JDBC Connection, надо смотреть по задаче.

Автор: 17dufa 19.4.2011, 16:30
LSD, ну тем не менее с DELETE, UPDATE и INSERT INTO SELECT прокатывает. 

Автор: MisterCleric 19.4.2011, 16:37
Привет. Чушь какая-то...
INSERT INTO VALUES - это стандартная операция из перечня CRUD, которые реализовывает любой JPA-vendor. В твоем случае это hibernate.
Надо смотреть в логи, чего именно оно у тебя ругается. 

Автор: 17dufa 19.4.2011, 16:48
MisterCleric, я когда синтаксис искал, нашел сообщения, что только INSERT INTO SELECT.
Попробовал INSERT INTO VALUES получил ошибку:
unexpected token: VALUES near line 1, column 26 [INSERT INTO Tariff(name) VALUES (:name)]; nested exception is org.hibernate.hql.ast.QuerySyntaxException: unexpected token: VALUES near line 1, column 26 [INSERT INTO Tariff(name) VALUES (:name)]

сам запрос:
INSERT INTO Tariff(name) VALUES (:name)

в классе Tariff всего одно поле - name.

Автор: MisterCleric 19.4.2011, 17:09
Да, ты абсолютно прав: так они и пишут:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html
Тогда пробуй через NamedQuery или вызывай метод save у Session на Entity

Автор: LSD 20.4.2011, 09:52
Цитата(17dufa @  19.4.2011,  16:30 Найти цитируемый пост)
ну тем не менее с DELETE, UPDATE и INSERT INTO SELECT прокатывает

Да действительно, теперь он и такие штуки поддерживает.

Мне только непонятно в чем смысл вставки одно объекта через HQL. Почему не через entity или native SQL?

Автор: 17dufa 20.4.2011, 11:01
LSD, хотелось HQL запросы вынести в отдельный файл, чтобы при установке у разных заказчиков была возможность немного допилить программу. спускаться до native SQL - вылезут диалекты. буду решать именно на уровне entity и выноса в отдельный файл куска кода, благо язык скриптовый (GROOVY). 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)