2

ドメイン クラスの重複挿入を防ぐにはどうすればよいですか?

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
}
4

2 に答える 2

4

これは Grails に処理させる必要があります。制約を正しく定義すれば、追加のコードは必要ありません。

そして、私が見ることができるように、あなたはすでに持っています

locationXY (blank:false, unique:true)

したがって、コードから読み取ったことから、同じ場所XYで別の場所を挿入することはできないはずです。

コードを実行した後、データベースの内容を確認しましたか? テーブルに同じ 2 つの行が表示されますlocationXYか?

ところで:あなたのライン

location.save(flush:true)

を指定しなかったため、例外はスローされませんfailOnError:true。したがって、次の行は期待どおりの結果になる可能性があります。

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

PS: あなたのafterInsertコードは何ですか? わかりやすくするために削除します。

于 2012-06-10T19:45:33.880 に答える
0

id の制約を追加する必要はありません。これは grails によって自動的に行われます。これを削除すると、プログラムは期待どおりに実行されるはずです。その場合、一意の値は locationXY だけです。

于 2012-06-10T14:03:37.577 に答える