2010-04-29 2 views
0

Я хочу написать запрос вставки в Grails. Я пробовал все возможные комбинации, но не могу получить синтаксис правильно. Кто-нибудь может помочь?Запрос на запрос HQL в Grails

class Person { 
    int age 
    String name 
} 

я попытался следующие:

Person.executeUpdate("insert into Person values (20,"ABC")") 

p.s.:Please do not mention using save()

ответ

5

Execute родной запрос:

def sql = new Sql(sessionFactory.currentSession.connection()) 
sql.execute("insert into person values(?,?)", ["foo", "bar"]) 

отмечают, что person фактическое имя таблицы.

+0

Спасибо за ответ, Ну, честно говоря, мое требование - всякий раз, когда запись обновляется, вместо того, чтобы обновлять запись, нужно вставить новую запись, но с другой меткой времени. Есть ли что-либо из коробки в граале, которое я могу использовать для реализации этого поведения? Большое спасибо. – WaZ

+0

Будет ли запись обновляться с помощью функции save()? например person.save() создает запись нового человека с новой меткой времени вместо обновления существующей записи? – armandino

+0

Как это требование будет соответствовать ограничениям базы данных. Просто подумайте об уникальном ограничении в одной строке таблицы. Это больше не сработает. Насколько я понимаю вас, вы хотите сохранить информацию об изменениях, внесенных в запись. Вы должны посмотреть на Envers Plugin для этого: http://code.google.com/p/grails-envers-plugin/ – stefanglase

3

Это не выглядит возможным. См. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-direct и обратите внимание, что он говорит: «Поддерживается только форма INSERT INTO ... SELECT ..., а не INSERT INTO ... VALUES ... form». Таким образом, вы можете вставлять как выбор из одной или нескольких других таблиц, но не можете вставлять их так же, как и с помощью save().

+0

Привет, Берт спасибо за ваш ответ, пожалуйста, прокомментируйте ответ от armandino. – WaZ

Смежные вопросы