2011-06-21 10 views
1

は、私はバージョン番号を使用したテーブルは、行の更新にゼロと自動インクリメントで開始すると私の理解だった1.0.3から1.3.7Grailsのバージョン列

に移行していますGrailsのアプリケーションを持っています。私が持っているレガシーデータはすべて、各行のバージョンセルがnullであることを示していますが、入力される新しい行のバージョン番号は0です。

バージョン1.0.3のGrailsはこの概念をサポートしていませんでしたか? nullの代わりにすべての適切なテーブルのすべての行をユーザー0に更新する必要がありますか?何が意味ですか?ありがとう。

答えて

6

Grailsは、Hibernateのオプティミスティックロックを実装するために常にバージョン列をサポートしています。インスタンスを更新すると、Hibernateは現在のバージョンと以前のバージョンを比較するSQLを生成し、異なる場合は例外をスローします。 SQL nullは決して等しいものではないので、これらの行を更新しようとすると例外が発生します。

修正は簡単ですが、ヌル値を0に設定するためのクエリを実行するだけです(update table_name set version=0 where version is nullなど)。

これを実行したら、将来NULL値を避けるために、それらの列を非ヌルに変更する必要があります。

+0

情報をいただきありがとうございます。どのようにこのコラムが最初にヌル値を持つ可能性があるかについての考え方はありますか?プロジェクトは以前のバージョンのGrails上で動作していましたが、例外はスローされませんでした。私はあなたが言ったことを確認することができます。今は更新されたときに投げられるのですが、以前に投げられなかった理由は説明できません。あなたの助けをもう一度ありがとう。 – skaz

+0

誰かが手動で列をnullableとして追加しない限り、そのようなことは考えられません –

関連する問題