5

注釈を使用して、テーブルの 1 つに新しい bool 列を追加しようとしています。

@Column(name = "selected", nullable = true)

private boolean selected;

次に、ゲッター/セッターを追加しますが、アプリケーションを実行すると、次のエラーが発生します。

Exception occurred inside setter of com.ingens.warranty.model.WarrantyCase.warrantyDetail; nested exception is org.hibernate.PropertyAccessException: Exception occurred inside setter of com.ingens.warranty.model.WarrantyCase.warrantyDetail

私の質問は初心者の質問かもしれませんが、私はかなり静かになりました

ありがとう

編集:

エラー スタックでこのエラーが見つかりましたUnknown column 'warrantyse14_.selected' in 'field list'。どうやら列が作成されておらず、SQL 選択コマンドが存在しないその列を使用しているため、何らかの理由で注釈が機能しないと想定しています。アプリケーションを実行した後、列を作成しません。

4

1 に答える 1

5

変化する private boolean selected;

private Boolean selected;

Hibernate が選択されたマップされた列からプリミティブな選択されたフィールドに null 値を設定しようとすると、例外が発生すると思います。代わりにフィールドが Object に設定されていれば、この問題は発生しませんでした。

列の定義は、スキーマの更新/検証 (hbm2ddl) と組み合わせて使用​​すると便利です。マッピングは、新しいフィールドを単独で定義する場合には対応していません。この場合、次の 2 つのステートメントを発行する必要があります。

「alter table ... 選択した列を追加 ...」

「更新... set selected = false where selected is null」

スキーマへの Hibernate の自動更新をトリガーするには (たとえば を適用@ColumnDefinition)、次の Hibernate プロパティを追加する必要があります: hibernate.hbm2ddl.auto=updateJPA を使用している場合は persistence.xml プロバイダー プロパティに、使用している場合は hibernate.cfg.xml のプロパティとして一人で冬眠する

于 2013-03-21T20:52:50.960 に答える