用户登录
用户注册

分享至

hibernate 映射设置默认值

  • 作者: 较劲_麻黄素
  • 来源: 51数据库
  • 2020-12-10
解决方法:
?? 在hibernate映射文件对数据库表的描述中,在当前字段处加入insert="false"语句,这时hibernate在进行插入操作时,只会为那些有实值的字段赋值,而值为空白的字段就会使用数据库表中定义的默认值了。
举例说明,表person:

CREATE?TABLE?address?(
?i_id?int(11)?NOT?NULL?auto_increment,
?c_address?varchar(100)?NOT?NULL?default?'中国',
?PRIMARY?KEY??(id)
)
address.hbm.xml:

???
???????true
???????
???????
???????????
???????

???????

运行程序
public?regAddress(String?a){???//传入的值a未在网页文本框里获得任何值(家庭地址)
Address?p?=?new?Address?();
p.setAddress(a);
HiFactory.save(p);
}
此时hibernate生成的sql语句为insert?into?person(c_address)?values('');
数据库表结果为
i_id???c_address
1??????null
修改address.hbm.xml为:

???
???????true
???????
???????
???????????
???????

???????

再次运行程序,此时hibernate生成的sql语句为?insert?into?address()?values();




  解决方法: ?? 在hibernate映射文件对数据库表的描述中,在当前字段处加入insert="false"语句,这时hibernate在进行插入操作时,只会为那些有实值的字段赋值,而值为空白的字段就会使用数据库表中定义的默认值了。 举例说明,表person: create?table?address?( ?i_id?int(11)?not?null?auto_increment, ?c_address?varchar(100)?not?null?default?&apos;中国&apos;, ?primary?key??(id) ) address.hbm.xml: <hibernate-mapping?package="cn.com.lough.model"> ???<class ???????name="address?" ???????table="address?" ???????lazy="false" ???> ???????<meta?attribute="sync-dao">true</meta> ???????<cache?usage="read-write"/> ???????<id ???????????name="iid" ???????????type="integer" ???????????column="i_id" ???????> ???????????<generator?class="native"/> ???????</id> ???????<property ???????????name="c_address" ???????????column="c_address?" ???????????type="string" ???????????not-null="false" ???????????length="128" ???????/> </hibernate-mapping> 运行程序 public?regaddress(string?a){???//传入的值a未在网页文本框里获得任何值(家庭地址) address?p?=?new?address?(); p.setaddress(a); hifactory.save(p); } 此时hibernate生成的sql语句为insert?into?person(c_address)?values(&apos;&apos;); 数据库表结果为 i_id???c_address 1??????null 修改address.hbm.xml为: <hibernate-mapping?package="cn.com.lough.model"> ???<class ???????name="address" ???????table="address" ???????lazy="false" ???> ???????<meta?attribute="sync-dao">true</meta> ???????<cache?usage="read-write"/> ???????<id ???????????name="iid" ???????????type="integer" ???????????column="i_id" ???????> ???????????<generator?class="native"/> ???????</id> ???????<property ???????????name="c_address" ???????????column="c_address" ???????????type="string" ???????????not-null="false" ???????????length="128" ???????????insert="false" ???????/> </hibernate-mapping> 再次运行程序,此时hibernate生成的sql语句为?insert?into?address()?values();
软件
前端设计
程序设计
Java相关