(2)将
dynamic-insert="true"
>
注释:加上dynamic-insert="true" 即可,说明是动态插入你在数据库中定义好的默认值。dynamic-update="true"相对于更新而言的。
if more lines of text exist in the file, print another page.
namespace designpattern.create.component
{
abstract class component {
protected string name;
public component(string name)
{
this.name = name;
}
hibernate映射数据库表如何使表中字段默认值生效
纯杰宗の0002 | 浏览 2133 次
推荐于2016-02-04 08:55:26最佳答案
解决方法: 在hibernate映射文件对数据库表的描述中,在当前字段处加入insert="false"语句,这时hibernate在进行插入操作时,只会为那些有实值的字段赋值,而值为空白的字段就会使用数据库表中定义的默认值了。
举例说明,表person:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
create table address (
i_id int(11) not null auto_increment,
c_address varchar(100) not null default '中国',
primary key (id)
)
address.hbm.xml:
table="address "
lazy="false"
>
true
type="integer"
column="i_id"
>
column="c_address "
type="string"
not-null="false"
length="128"
/>
运行程序
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为:
table="address"
lazy="false"
>
true
type="integer"
column="i_id"
>
column="c_address"
type="string"
not-null="false"
length="128"
insert="false"
/>
再次运行程序,此时hibernate生成的sql语句为 insert into address() values();