如何在Grails中保存或更新?

jai*_*jai 5 grails save

如果记录不存在,则应插入.如果记录存在,Grails应该进行更新.

new MyEntity(attr1:'val1', attr2:'val2').saveOrUpdate()????
Run Code Online (Sandbox Code Playgroud)

编辑 我根据你的建议修改了我的代码:

List<NutDto> res = np.parseNutData(file.inputStream);
for(NutDto cellValue : res){
    def nutInstance = NutData.get(cellValue.getIdd())       
    System.out.println("nutInstance = " + nutInstance);         
    if(nutInstance){
        System.out.println("Exists : " + nutInstance);
        nutInstance.foo=cellValue.getFoo()
        nutInstance.bar=cellValue.getBar()              
    }
    else{
        System.out.println("Not Exists")
        nutInstance =   new NutData(idd:cellValue.getIdd(),
                foo:cellValue.getFoo(),
                bar:cellValue.getBar())
    }

    def saveres = nutInstance.save(failOnError: true);
    println("saveres = " + saveres);
    nutInstance.errors.each { println it }
}
Run Code Online (Sandbox Code Playgroud)

仍然没有更新.它的投掷错误.

Field error in object 'sps.NutData' on field 'idd': rejected value [123456-1234]; codes [sps.NutData.idd.unique.error.sps.NutData.idd,sps.NutData.idd.unique.error.idd,sps.NutData.idd.unique.error.java.lang.String,sps.NutData.idd.unique.error,nutData.idd.unique.error.sps.NutData.idd,nutData.idd.unique.error.idd,nutData.idd.unique.error.java.lang.String,nutData.idd.unique.error,sps.NutData.idd.unique.sps.NutData.idd,sps.NutData.idd.unique.idd,sps.NutData.idd.unique.java.lang.String,sps.NutData.idd.unique,nutData.idd.unique.sps.NutData.idd,nutData.idd.unique.idd,nutData.idd.unique.java.lang.String,nutData.idd.unique,unique.sps.NutData.idd,unique.idd,unique.java.lang.String,unique]; arguments [idd,class sps.NutData,123456-1234]; default message [Property [{0}] of class [{1}] with value [{2}] must be unique]
Run Code Online (Sandbox Code Playgroud)

值未更新.

编辑2

package sps    
class NutData {

    String idd
    String foo
    String bar


    static constraints = {
        idd(blank:false, unique:true)
    }

    static mapping = {
        table 'M_NUT_DATA'
        version false
        id generator: 'assigned', name: "idd", type: 'string'
        foo column:'FOO_COL'
        bar column:'BAR_COL'        
    }

    String toString(){
        return idd + '_' + foo
    }
}
Run Code Online (Sandbox Code Playgroud)

Joc*_*lyn 12

动态查找器可以精确地用于此目的.

使用findOrSaveBy*您的第一个示例代码将如下编写:

def entity = MyEntity.findOrSaveByAttr1AndAttr2( val1, val2 )
Run Code Online (Sandbox Code Playgroud)

文档:http://grails.org/doc/latest/ref/Domain%20Classes/findOrSaveBy.html


elC*_*ano 3

A.save()应该完成这一切,但这取决于您创建对象的方式。

如果您使用new MyEntity(..)grails将创建记录,如果您从数据库获取对象,则保存将进行更新。