Hibernate常见注解说明

mac2022-06-30  68

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上百实例源码以及开源项目
最新回复(0)