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

Database Hibernate将新的布尔列添加到数据库,database,hibernate,Database,Hibernate,我正在尝试使用注释将一个新的bool列添加到其中一个表中,我已经尝试过了 @Column(name=“selected”,nullable=true) 选择私有布尔值 然后我添加了getter/setter,但是当我运行应用程序时,我得到了以下错误: com.ingens.warranty.model.WarrantyCase.warrantyDetail的setter内部发生异常;嵌套异常为org.hibernate.PropertyAccessException:com.ingens.war

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

@Column(name=“selected”,nullable=true)

选择私有布尔值

然后我添加了getter/setter,但是当我运行应用程序时,我得到了以下错误:

com.ingens.warranty.model.WarrantyCase.warrantyDetail的setter内部发生异常;嵌套异常为org.hibernate.PropertyAccessException:com.ingens.warranty.model.WarrantyCase.warrantyDetail的setter内部发生异常

我对Hibernate还很陌生,虽然我的问题可能是个新手问题,但它让我陷入了沉默

谢谢

编辑:

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

更改
选择私有布尔值

选择私有布尔值


我认为发生的情况是,Hibernate试图将选定映射列中的null值设置到选定字段中,该字段是基本字段,因此出现异常。如果将字段设置为Object,则不会发生这种情况

列定义与模式更新/验证(hbm2ddl)结合使用非常有用,映射不包括您自己定义新字段的情况。在这种情况下,您必须发布两条声明:

“更改表格…添加选定的列…”

“update…set selected=false,其中selected为null”


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

这可能是“一个可为空的数据库列映射到一个基元类型属性”。检查这里谢谢你指出,我不敢相信我真的错过了,所以我把它改成了
@Column(name=“selected”,nullable=false,columnDefinition=“boolean defaule false”)
。更改表以添加新列的确切时间是什么时候?也许我的注释错了?但无论如何,感谢您的快速回复。问题在于其他领域(保修案例中的保修详细信息)getter和SetterTanks rajesh,但这是我检查的第一个地方,它基本上是在读取我尝试调试的QuartyCase的一个对象属性,但它在读取属性之前就深入到了框架中,这使得我无法跟踪,因为我对hibernate还很陌生。我会试着对getter中的所有内容进行评论,看看是否能找出到底发生了什么。。无论如何,我已经将默认值设置为false,所以使用Boolean或Boolean不会有任何不同,除了Boolean比Boolean占用更多内存。但无论如何,它没有工作,但我认为发生的是Hibernate试图将空值从选定的映射列设置到选定的字段中,该字段是原始字段,因此出现异常。如果将字段设置为Object,则不会发生这种情况。另一个选项是填充空的选定列:“update…set selected=false where selected is null”是的,这正是我第一次阅读您的答案时的想法,老实说,我在回答您之前确实尝试过,但不应该
columnDefinition=“boolean defaule false”
将所选列的值设置为默认值false?再次感谢您的回复。列定义适用于模式生成(hbm2ddl)。无论如何,映射不包括定义新列并且不使用update语句设置默认值的情况。在这种情况下,尝试将空值“注入”到基元类型会导致这样的错误,这是我不知道的,我感谢您的帮助。所以基本上你说的是,如果我只是修改表,添加列,然后用false值更新它会更好吗?(抱歉,如果我搞错了什么)如果我搞错了,那么使用注释完成的映射是否会将属性映射到db中的字段?再次感谢您的快速回复和帮助