Grails可防止重复插入

时间:2012-06-10 10:03:18

标签: grails groovy gorm

如何防止重复插入域类?

Locations location = Locations.findByLocationXY(locationxy)
       if (location == null)
        {

            LocationManagement lm = new LocationManagement()
            location = lm.getSingaporeLocation(locationxy)
            location.save(flush:true)
        }

class Locations {

int id
String locationName
String locationXY

static constraints = {
    id(blank:false, unique:true)
    locationName (blank:false)
    locationXY (blank:false, unique:true)
}
def afterInsert = {

id= this.id
locationName = this.locationName
locationXY = this.locationXY
}

2 个答案:

答案 0 :(得分:4)

你必须让Grails处理这个 - 如果你以正确的方式定义你的约束,就不需要额外的代码。

正如我所看到的,你已经有了

locationXY (blank:false, unique:true)

因此,根据我从代码中读到的内容,不应该插入具有相同locationXY的其他位置。

运行代码后,您是否检查了数据库的内容?你真的在表格中得到两行locationXY吗?

btw:你的行

location.save(flush:true)
由于您未指定failOnError:true

不会抛出异常。因此,以下行可能会产生您的期望:

location.save(flush:true, failOnError:true)

PS:您的afterInsert代码是什么?为了清楚起见,我会删除它。

答案 1 :(得分:0)

您不需要为id添加约束。这是由grails自动完成的。 我想如果删除它,程序应该按预期执行。唯一唯一的值是locationXY。