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

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

先从问题开始,一个实体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不是提供了初始化赋值语句么!~~~



你可能感兴趣的:(mysql,java学习笔记)