注解可以替换复杂的hbm.xml文件,使得程序的开发大大简化

 

@Override    :子类重写父类方法

@Test  :junit测试

@Before  :测试之前执行

@SuppressWarnings     :防止代码报黄

 

@Entity  :标识实体类(被持久化)

@Table  DB层表的名称

@Transient :不持久化某个属性

@Column:数据表中的字段名

  @GenerateValue :主键生成策略

 

 Hibernate提供了Hibernate Annotations扩展包,使用注解完成映射。

Hibernate3.3之前,需单独下载注解开发包。

配置持久化类方式:

  @GeneratedValue指定了标识符的生成策略。JPA提供了4种标准用法。

  (1)AUTO:根据不同的数据库选择不同的策略。

  (2)TABLE:使用表保存id值。

  (3)INDENITY:使用数据库自动生成主键(主要是自动增长类型,如MySql、SQL Server)。

  (4)SEQUENCE:使用序列创建主键(如Oracle)。

 

配置持久化类的关联关系的方式:

 

1.实体类中注解的配置:

此案例中除  @GenericGenerator  的引用是org.hibernate.*外,  其他几个注解的引用皆为javax.persistence.*

  001.Dept

 1 package cn.happy.entity_annotations;
 2 
 3 import java.util.HashSet;
 4 import java.util.Set;
 5 
 6 import javax.annotation.Generated;
 7 import javax.persistence.CascadeType;
 8 import javax.persistence.Column;
 9 import javax.persistence.Entity;
10 import javax.persistence.GeneratedValue;
11 import javax.persistence.GenerationType;
12 import javax.persistence.Id;
13 import javax.persistence.OneToMany;
14 import javax.persistence.SequenceGenerator;
15 import javax.persistence.Table;
16 
17 import org.hibernate.annotations.GenericGenerator;
18 
19 
20 /**
21  * 注解1.1
22  */
23 @Entity 
24 @Table(name="DEPT")
25 public class Dept {
26     
27     /*@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")
28     @SequenceGenerator(name="seq_gen",sequenceName="HIBERNATE_SEQUENCE",allocationSize=1,initialValue=4)*/
29     
30     @Id
31     //主键生成策略
32     @GeneratedValue(generator="my_gen")
33     //自定义主键生成方式:uuid   
34     @GenericGenerator(name="my_gen",strategy="uuid")
35     private Integer deptNo;
36     
37     @Column(name="DNAME")
38     private String deptName;
39     
40     @Column(name="LOC")
41     private String loc;
42     
43     @OneToMany(mappedBy="dept",cascade={CascadeType.ALL})
44     private Set<Emp> emps = new HashSet<Emp>();
89 }

 

@Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")
@SequenceGenerator(name="seq_gen",sequenceName="SEQ_Num",allocationSize=1,initialValue=4)

  (1)使用@GeneratedValue设置主键生成策略。strategy=GenerationType.SEQUENCE描述了主键生成策略为Sequence,

  generator="seq_emp"指定了生成器为 seq_emp。

  (2)使用@SequenceGenerator设置了序列生成器,name="seq_name" 定义了序列生成器的名称为seq_emp;   

  seqenceName="seq_emp_id" 指定了序列Sequence的名称为seq_emp_id,数据库中需创建序列Sequence,名称为seq_emp_id;

  initialValue=1  设置了主键初始值,默认为0;   allocationSize=1 表示预分配多少个主键值,如设置为1,表示不预分配主键值,默认为50.

 

 

  002.Emp

 1 package cn.happy.entity_annotations;
 2 
 3 import java.util.Date;
 4 
 5 import javax.persistence.Column;
 6 import javax.persistence.Entity;
 7 import javax.persistence.FetchType;
 8 import javax.persistence.GeneratedValue;
 9 import javax.persistence.GenerationType;
10 import javax.persistence.Id;
11 import javax.persistence.JoinColumn;
12 import javax.persistence.ManyToOne;
13 import javax.persistence.NamedQuery;
14 import javax.persistence.SequenceGenerator;
15 import javax.persistence.Table;
16 
17 /**
18  * 注解1.2
19  */
20 @Entity
21 @Table (name="EMP")
22 @NamedQuery(name="selectEmp",query="from Emp e where e.empId>:eno")
23 public class Emp {
24     @Id @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="seq_gen")
25     @SequenceGenerator(name="seq_gen",sequenceName="SEQ_Num",allocationSize=1,initialValue=4)
26     @Column (name="EMPNO")
27    private Integer empId;
28     @Column (name="ENAME")
29    private String empName;    
30     @Column
31    private String job;
32     @Column
33    private String mgr;
34     @Column
35    private Date hiredate;
36     @Column
37    private Integer sal;
38     @Column
39    private Integer comm;
40    @ManyToOne(fetch=FetchType.LAZY)
41    @JoinColumn(name="DEPTNO")
42    private Dept dept;
43 
44 }