Hibernate不会使用可为空的OrderColumn更新表

时间:2017-11-24 07:17:08

标签: java hibernate jpa

我想用@OrderColumn更新现有模型。因为表中已存在数据,所以我想将其设为nullable,这是默认值。

@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]

为什么hibernate仍会尝试使订单列不可为空而且我需要做些什么才能修复它?

1 个答案:

答案 0 :(得分:1)

我通过创建新数据库并将其与当前数据库进行比较来发现潜在问题。

我不知道的是,数据结构之前是Set。生成的组合主键由两个对象的id组成。随着对List的更改,即使实际上已经存在,也不再保证唯一性。因此,新的组合主键不再包含小部件ID,而是包含订单值。

这最终会产生NOT NULL约束。