Если запись не существует, ее следует вставить.И если запись существует, Grails должен сделать обновление.
new MyEntity(attr1:'val1', attr2:'val2').saveOrUpdate()????
EDIT Я изменил свой код в соответствии с вашими предложениями:
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 }
}
Тем не менее его нетобновление.Его ошибки выброса.
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]
Значения не обновляются.
РЕДАКТИРОВАТЬ 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
}
}