2010-04-29 101 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

執行本機查詢:

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

注意person是實際的表名。

+0

感謝您的回覆, 說實話,我的要求是每當一條記錄被更新時,而不是更新記錄,但應該插入一條新記錄,但使用不同的時間戳。 Grails中有什麼可以用來實現這種行爲的框? 非常感謝。 – WaZ 2010-04-30 08:53:38

+0

記錄是否會通過save()更新?例如person.save()使用新的時間戳創建新的人員記錄,而不是更新現有的記錄? – armandino 2010-04-30 16:40:04

+0

這個要求如何適合數據庫的限制。只要想一想你桌子上一行的唯一約束。它不會工作了。據我瞭解,你想要保存關於記錄更改的信息。你應該看看Envers插件:http://code.google.com/p/grails-envers-plugin/ – stefanglase 2010-05-01 10:48:23

3

它看起來並不可能。請參閱http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html#batch-direct並注意它說「只支持INSERT INTO ... SELECT ...表單,而不支持INSERT INTO ... VALUES ...表單」。因此,您可以從一個或多個其他表中插入選擇,但不能像使用save()那樣直接插入。

+0

嗨,伯特感謝您的回覆,請檢查我對armandino的回覆的評論。 – WaZ 2010-04-30 09:50:46