2

dataBindのドキュメントを読み通そうとしていますが、それほど明確ではありません。

http://grails.org/doc/2.1.0/ref/Controllers/bindData.html

4つの列で構成される複合IDがあり、そのうちの1つを更新する必要があります。.save()を拒否し、エラーもスローしません。これらの値を変更してモデルを保存できる構成はありますか?

それを削除して新しいレコードを作成すると、ブラウザ側でdatatables / jeditableで使用していたROWIDがバンプされますが、これは実際にはオプションではありません。ただし、すべてのパラメーターを空のリストに含めたとしても、次のようになります。

def a = WaiverExemption.find("from WaiverExemption as e where e.exemptionRowId = ?", [params.rowid])
a.properties = params
bindData(a, params, [include: []])
a.save(flush: true, failOnError: true)

これは機能していないようです。また、列/プロパティに、それ自体と「id」の両方で明示的に名前を付けてみました。

4

1 に答える 1

0

bindData()が実際に何をするのか混乱しました。まだ混乱しています。

Grailsに複合IDがあり、1つ以上の列値を変更したい場合、save()は質問で提案されているように実行されることはありません。代わりに、.executeUpdate()を使用することをお勧めします。適切なSQLとほぼ同じ構文で、問題のテーブルを更新するHQLを渡すことができます(ただし、Web上のほとんどの例は削除用です)。「updatedomaindset d.propertyName =?」の行に沿った何か 動作するはずです。

これが賢明なことなのか、それともGrailsアプリの動作に関する哲学的ルールに違反しているのかはわかりませんが、実際には更新されます。注意とたくさんのテストをお勧めします。このがらくたは私にとってすべてのブードゥーです。

于 2012-09-25T15:43:20.093 に答える