我正在尝试使用注释将一个新的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命令正在使用那个不存在的列,所以我假设注释没有由于某种原因,它只是在我运行应用程序后没有创建列。
答案 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中的属性