2017-11-24 2 views
0

@OrderColumnで既存のモデルを更新したいと思います。テーブルには既にデータが存在するため、デフォルト値のnullableにします。Hibernateはnullable OrderColumnのテーブルを更新しません

@ManyToMany(fetch = FetchType.EAGER) 
@OrderColumn(name = "widget_order", nullable = true) 
private List<Widget> widgets = new ArrayList<>(); 

更新がしかし、メッセージで失敗します。

org.hibernate.tool.schema.spi.SchemaManagementException: 
    Unable to execute schema management to JDBC target 
    [alter table Dashboard_Widget add widget_order number(10,0) not null] 

はなぜまだ順序の列がNULL可能ではないようにしよう休止状態ず、私はそれを修正するために何をすべきかが必要ですか?

+0

私は 'hibernate-entitymanager:5.0.12.Final'を使用しています。 –

+0

[関連](https://stackoverflow.com/questions/2956171/jpa-2-0-ordercolumn-annotation-in-hibernate-3-5)? – pirho

答えて

0

新しいデータベースを作成して現在のデータベースと比較することで、根本的な問題を発見しました。

私が知らなかったのは、以前のデータ構造はSetでした。生成された合成主キーは、両方のオブジェクトのIDで構成されていました。 Listへの変更により、一意性は、それが実際にはあっても、もはや保証されなくなりました。したがって、作成された新しい主キーには、ウィジェットIDは含まれず、順序値が含まれています。

これは最終的にNOT NULL制約をもたらします。

関連する問題