Java_注解之一


注解可以替換復雜的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 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM