Java注解之一

来源:互联网 发布:蔡康永的母亲 知乎 编辑:程序博客网 时间:2024/06/06 01:58

注解可以替换复杂的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.122  */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     @Id31     //主键生成策略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.219  */20 @Entity21 @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     @Column31    private String job;32     @Column33    private String mgr;34     @Column35    private Date hiredate;36     @Column37    private Integer sal;38     @Column39    private Integer comm;40    @ManyToOne(fetch=FetchType.LAZY)41    @JoinColumn(name="DEPTNO")42    private Dept dept;43 44 }
0 0