在 spring 与hibernate 结合时:
hibernate.hbm2ddl.auto有好几个设置值,其中就有update 这个值也是比较常用的,但是设置这个值可能会有一些问题出现。
所以,了解一下它是有必要的。
经过我自己的实验结果,hibernate.hbm2ddl.auto 如果设置成 update ,每次应用运行起来时,它会提供一种hibernate正向工程的机制,为你
自动建表而不是手工建立,这也是它被经常被作为设置值使用的原因所在。但是同时,hibernate.hbm2ddl.auto 在设置成update后,如果你在原先的
entity中加了一个属性后,我们期望的是数据库表结构也变化成为比原先的表增加了一个字段,即entity中新增属性对应的数据库表字段。正如你期望
的那样,在应用重新启动时,他会这样做。
那我们来看看他带来的问题,试着进行这样的操作,修改原先entity中某一属性名完成对应 setter 和 getter , 这时理想的期望是,数据库表结
构中原先相对应的字段也会随着修改(此处的前提是: 进行数据库表映射时,使用数据库产品默认字段名),它不能完成插入操作,但是,数据库表
中会新增一个字段(其值是DB默认值)来对应你修改后的entity属性,而此属性修改前对应的字段数据库字段还存在(值也在);而删除entity某一
属性时,我们期望应用重启后,对应字段也“消失”,但是事与愿违,不会这样,你如果进行插入操作会失败,数据库表结构(和字段值)不变即不会
删除对应字段。
(有问题有其他见解的欢迎交流讨论!!)