Hibernate将新的布尔列添加到数据库

时间:2013-03-21 19:06:35

标签: database hibernate

我正在尝试使用注释将一个新的bool列添加到其中一个表中,我已经尝试了

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

private boolean selected;

然后我添加了getter / setter但是当我运行应用程序时出现了这个错误:

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

我对Hibernate很新,虽然我的问题可能是一个新手问题,但它让我很安静

由于

编辑:

好的我在错误堆栈Unknown column 'warrantyse14_.selected' in 'field list'中发现了这个错误,显然没有创建列,而且sql select命令正在使用那个不存在的列,所以我假设注释没有由于某种原因,它只是在我运行应用程序后没有创建列。

1 个答案:

答案 0 :(得分:5)

更改 private boolean selected;

private Boolean selected;

我认为发生的事情是Hibernate尝试将所选映射列中的空值设置为所选字段,该字段是原始的,因此是异常。如果字段已设置为Object,则不会发生这种情况。

列定义与架构更新/验证(hbm2ddl)结合使用,并且映射不包括您自己定义新字段的情况。在这种情况下,您必须发出两个语句:

“alter table ... add column selected ...”

“update ... set selected = false where selected is null”

为了触发对模式的自动Hibernate更新(例如应用@ColumnDefinition),如果使用JPA,则必须将以下Hibernate属性:hibernate.hbm2ddl.auto=update添加到persistence.xml提供程序属性,如果单独使用Hibernate,则作为hibernate.cfg.xml中的属性