如何防止重复插入域类?
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
}
答案 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。