5

我正在尝试使用注释将新的 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 命令正在使用该列,该列不存在,所以我假设注释由于某种原因不起作用,它只是运行应用程序后不创建列。

4

1 回答 1

5

改变 private boolean selected;

private Boolean selected;

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

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

“更改表...添加选定的列...”

“更新...设置选定= false,其中选定为空”

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

于 2013-03-21T20:52:50.960 回答