mysql 填充null_MySQL字段默认值不能填充JavaBean保存时的NULL

问题

我们在数据库建表的是时候,经常有下面类似的语句:

`name` varchar(50) NOT NULL DEFAULT '' COMMENT '视频所属用户',

意思是name这个String类型字段不能为空,但是可以用空字符串填充。

这个默认值并不是万能的。

假如name属于Task这个Javabean,不给name初始化(即name为null),jpa或者hibernate使用

taskDao.saveAndFlush(task);

的时候还是会收到SQLException,Exception内容是column name 不能为null。

2.原因

MySQL只能为缺省的字段使用默认值,传入了字段又为null则不能使用默认值。下面有两条SQL语句。

第一条:

insert into task (id, name) values (1001, null);

这条SQL语句执行就会报错。

第二条:

insert into task (id) values (1001);

这条SQL语句则会执行成功,name为空字符串。

taskDao.saveAndFlush(task);

这种用法就相当于第一条SQL语句。

3. 解决办法

要想MySQL帮你使用默认值,你就不要传那个字段;但是jpa或者hibernate保存JavaBean时,JavaBean中的属性要么有值,要么为null,不符合MySQl的要求。这时可以使用BeanUtil为JavaBean的null属性填充空字符串、0、当前时间等等符合你要求的默认值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值