2011-06-28 60 views
2

用來處理Grails Groovy腳本,並希望做一個更新到數據庫中的記錄。我做基本從JSON獲取對象並將其轉換爲Domain類,然後在其上執行save()。從我的理解,因爲我是新手Groovy和grails保存應該更新,如果「ID」已經存在。但我不明白,我得到了關鍵'PRIMARY'的重複輸入'1'的標準SQL錯誤。我該如何解決?JSON聖盃的Groovy更新SQL

def input = request.JSON 
def instance = new Recorders(input) 
instance.id = input.getAt("id") 
instance.save() 

和我的域名是:

class Recorders { 

Integer sdMode 
Integer gsmMode 

static mapping = { 
    id generator: "assigned" 
} 

static constraints = { 
    sdMode nullable: true 
    gsmMode nullable: true 
} 
} 
+0

作爲羅布Hruska的指出,必須從數據庫中獲取對象和更新;不要使用重複的ID創建一個新的。 –

回答

2

而不是做一個new Recorders(input),你可能應該以get它:

def input = request.JSON 
def instance = Recorders.get(input.getAt('id')) 
instance.properties = input 
instance.save() 

編輯

(從您的評論)如果它不存在,你想要我nsert它:

def input = request.JSON 
def id = input.getAt('id') 
def instance = Recorders.get(id) 
if(!instance) { 
    instance = new Recorders(id: id) 
} 
instance.properties = input 
instance.save() 

我不使用分配的id號發電機多了,所以我不知道如果Grails將在ID自動綁定(因爲它希望它被分配)。如果是的話,你也許可以從Recorders()構造函數刪除id: id

+0

如果它不存在,那麼我想插入它......我想我也應該把它放在這個問題上。 – JPM

+0

我會嘗試一下,讓你知道謝謝! – JPM

+0

不調用save()之前的工作越來越IDS這個類必須手動分配: – JPM