ドメインには、複合 ID の 4 つの列部分があります。
id composite: ['exemptionTermCode', 'exemptionCode', 'exemptionClassification', 'exemptionPayType']
REST サービスの見苦しいパロディであるコントローラーには、次のコードがあります。
else if (request.method == "PUT" && params.rowid) {
def a = WaiverExemption.find("from WaiverExemption as e where e.exemptionRowId = ?", [params.rowid])
if (params.exemptionPay) a.exemptionPayType = params.exemptionPay
if (params.exemptionClassification) a.exemptionClassification = params.exemptionClassification
if (params.exemptionCode) a.exemptionCode = params.exemptionCode
if (params.exemptionPriority) a.exemptionPriority = parseLong(params.exemptionPriority)
if (params.exemptionTempFlag) a.exemptionTempFlag = params.exemptionTempFlag
a.exemptionUserId = session.licensePlate
a.save(flush: true, failOnError: true)
コンソールにエラーは表示されません。ステップ スルーすると、ウォッチ ウィンドウにモデル オブジェクトが表示され、正しいプロパティが更新されていることがわかります。save() が終了すると、model.errors に次のように表示されます。
grails.validation.ValidationErrors: 0 エラー
例外なく。デバッガーをクラッシュさせません。なだ。後続のコマンドはすべて実行されます。ただし、オラクル側では、更新されたレコードは確実に未更新のままです。ここまで来るのにしばらく時間がかかりました (昨日まで .errors について知りませんでした)。gorm メソッドを使用して挿入と削除を行うことができます。save() が失敗する理由がわかりません。以前のように検証の問題が発生していません。一意ではない pk を持つような方法でフィールドを更新していません。そうすると、エラーがスローされると予想されます。
私がここに欠けているものはありますか?
これを更新するまでに、レコードを検索するための pk の一部を失ったため、rowid を使用してレコードを検索しています。Rowid は updateable false に設定されています。
[編集] 保存後に a.refresh() も試しました。これは失敗し、そのキーを持つレコードを見つけることができません (更新クエリを実際に実行していないため、予想どおりです。