1 @Entity表示将一个类声明为一个实体的bean(即一个持久化的POJO类)
2
3 2.@Table表示声明该实体bean映射指定的表(table),目录(catalog)和schema的名字
4
5 @Id表示声明了该实体bean的标识属性,即主键
6
7 @Column表示声明了属性到列的映射。该注解有如下属性:
8 4.1:name 可选 列名(默认值为属性名)
9 4.2:unique 可选 是否在该列上设置唯一约束(默认为false)
10 4.3:nullable 可选 是否为空(默认为false)
11 4.4:insertable 可选 是否作为生成insert语句中的一个列(默认为true)
12 4.5:updateable 可选 是否作为生成update语句中的一个列(默认为true)
13 4.6:columnDefinition 可选 为这个特定的列覆盖sql ddl片段(可能影响移植)
14 4.7:table 可选 定义对应的表(默认为主表)
15 4.8:length 可选 列长度(默认值为255)
16 4.9:precision 可选 列十进制进度,默认为0
17 4.10:scale 可选 如果十进制数值范围可用,在此设置
18
19 @GeneratedValue表示主键的生成策略。该注解有如下属性:
20 5.1:strategy 指定生成的策略(JPA定义的),默认是GenerationType.AUTO
21 GenerationType.AUTO主键有程序控制
22 GenerationType.IDENTITY主键由数据库自动生成,常用与sqlserver
23 GenerationType.SEQUENCE根据序列生成主键,这个值要与generator一同使用
24 generator指定主键的生成器(可能是oracle中序列)
25 GenerationType.TABLE使用一个特定的数据库表格来保存主键
26
27 5.2:@GenericGenerator 表示声明了一个hibernate的主键的生成策略。支持13种生
28 成策略。该注解有如下属性:name(指定生成器的名称),strategy(指定生成策 略),parameters(得到strategy指定的具体生成器所用到的参数)
29 其中13中策略(strategy属性值)如下:
30 native 指将主键的生成工作由数据库完成,很常用.
31 Uuid 采用128位uuid算法生成的主键,占用空间较大
32 Hilo要在数据库中建立一张额外的表,默认表名为hibernate_unque_key,默认 字段为integer类型,名称是next_hi(比较少用)
33 assigned 在插入数据的时候主键由程序处理(很常用),这是
<generator>元素 没有指定时的默认生成策略。等同于JPA中的AUTO。
34 Identity 自动增长,等同于JPA中identity
35 select 使用触发器生成主键(主要用于早期的数据库主键生成机制,少用)
36 sequence 调用谨慎数据库的序列来生成主键,要设定序列名,不然hibernate 无法找到。
37 seqhilo 通过hilo算法实现,但是主键历史保存在Sequence中,适用于支持 Sequence的数据库,如Orcale(比较少用)
38 increnment 插入数据的时候hibernate会给主键添加一个自增的主键,但是一个 hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法
39 foreign 使用另一个相关的对象的主键。通常和
<one-to-one>联合起来使用
40 guid 采用数据库底层的guid算法机制,对应MySQL的uuid()函数,SQL Server 的newid()函数,ORCALE的rawtohex(sys_guid())函数等
41 sequence-identity sequence策略的扩展,采用立即检索策略来获取sequence 值,需要JDBC3.0和JDK4以上(含1.4)版本
42 uuid.hex 看uudi,建议用uuid替换
43
44 看了这么多的主键生成策略,我自己也快晕了,其实常用的就是oracle主键与sqlserver的主键生成策略,它们分别表示如下:
45 Oracle主键生成:
46 @Id
47 @GeneratedValue(generator = "depgen")
48 @GenericGenerator(name = "depgen", strategy = "assigned")
49 private int deptno;//deptno为oracle数据库中某部门表的主键
50
51 Sqlserver主键生成:
52 @Id
53 @GeneratedValue(strategy=GenerationType.IDENTITY)
54 private Integer uid;//uid为sqlserver数据库中某用户表的用户id,表示主键
55
56 6.@OneToMany用于设置一对多的关联,用于配置
<set>端。cascade属性有5个值(只有CascadeType.All好用?), 分别是CascadeType.PERSIST(级联新建)、CascadeType.REMOVE(级联删除)、CascadeType.REFRESH(级联刷新)、CascadeType.MERGE(级联更新)、CascadeType.All(全部)
57
58 targetEntity属性表示目标指向那个类
59
60 mappedBy属性表示映射 即:
61 @OneToMany(targetEntity=EmpInfo.class,cascade=CascadeType.ALL,mappedBy="dept")
62 private Set empinfos = new HashSet(0);
63
64 Fetch指定是否延迟加载,值为FetchType.LAZY表示延迟,为FetchType.EACER表示立即加载。
65
66 @ManyToOne用于多对一的关联,用于配置如:private DeptInfo dept;端。
67 如:
68 @ManyToOne(targetEntity=DeptInfo.class)
69 @JoinColumn(name="deptno")//这里的deptno为此表对应的外键名
70 private DeptInfo dept;
71
72 @Cache用于配置配置缓存
73
74 以上是小编的一点小小的终结,希望对大家有所帮助!
75 最后祝大家愉快!
转载于:https://www.cnblogs.com/huzi007/archive/2013/03/23/2976769.html
相关资源:JAVA上百实例源码以及开源项目