使用带有grails的Groovy脚本,并希望对数据库中的记录进行更新。我做的基本从JSON获取对象并将其转换为Domain类,然后对其执行save()。根据我的理解,因为我是Groovy和grails的新手,如果“id”已经存在,则应该更新save。但是我没有得到,我得到关键'PRIMARY'的“重复条目'1'的标准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 :(得分:2)
而不是new Recorders(input)
,你可能应该get
:
def input = request.JSON
def instance = Recorders.get(input.getAt('id'))
instance.properties = input
instance.save()
修改强>
(来自你的评论)如果它不存在而你想插入它:
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(因为它期望它被分配)。如果是,您可以从id: id
构造函数中删除Recorders()
。