Hibernate常见注解说明
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 最后祝大家愉快!