mysql 字段默认值设置不起作用

本文探讨了在使用Java和Hibernate框架时,如何为实体类的int字段设置合理的默认值。通过对比几种方法,包括直接在字段声明时初始化赋值,利用数据库默认值特性,以及在保存前手动设置值等,最终找到了既简洁又高效的方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决问题的办法都是由具体问题引起的。

先从问题开始,一个实体entity的int 字段score原来默认为0 ,现在想改为默认为100.

第一次解决尝试: 结果:成功

class entity{

private int score

//省略下面的getter和setter方法

}

在new entity()后,score因为是int类型,所以 score=0;

所以在用hibernate的save(entity)之前,entity.setScore(100);

问题虽然解决了,但是这种方式有点侵入式的感觉,而且 save的方法也许有很多处调用,

作为有追求的程序猿,必须得找出更通用的方法。

第二次解决尝试: 结果:失败

我用的是mysql数据库,字段有个default值,即默认值。

然后我设置score的默认值为100。

然并卵, 在new entity()后,score因为是int类型,所以 score=0;

数据库字段默认值不起作用。

然后我想,当给score值传入null时,数据库字段默认值会不会起作用呢?

我就修改了score的声明类型 private Integer score;

这样在new entity()后,score因为是Integer类型,所以 score=null;

结果呢,数据库中score值果然是null,而不是100。

为什么呢?

是因为sql语句问题

INSERT INTO entity (id) VALUES(2) 此条sql语句插入的数据 score=100,起作用了。

INSERT INTO entity (id,score) VALUES(2,null) 此条sql语句插入的数据 score=null

原来是因为hibernate在插入数据时,默认会给所有的字段赋值,即使为null。

最佳解决方案:

折腾了这么多,最终请教同事,出现了让我震撼的终极最佳解决方案。

class entity{

private int score=100;

//省略下面的getter和setter方法

}

简单不简单,是不是最基础的变量声明和初始化赋值问题。

哎,最简单实用的有时候是最好用的!!!!

应该早想到的,就是想给实体的某个字段初始化赋值,java不是提供了初始化赋值语句么!

本文为转载,原文为:https://blog.youkuaiyun.com/u013476542/article/details/60867415

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值