首页 > 代码库 > JPA的常用Annotation

JPA的常用Annotation

http://www.blogjava.net/zJun/archive/2007/01/24/95747.html

 1、

@Entity:通过@Entity注解将一个类声明为一个实体bean 

@Table(name=”t_Husband”):通过 @Table注解可以为实体bean映射指定表,name属性表示实体所对应表的名称,如果没有定义 @Table,那么系统自动使用默认值:实体的类名(不带包名) 

 2、

@Id:用于标记属性的主键 

@GeneratedValue(默认取值anto,ID生成策略)

 3、

@Column(name=”wifeid”):表示持久化属性所映射表中的字段,如果属性名与表中的字段名相同,则可以省略

 4、

联合主键:当entity class使用复合主键时,需要定义一个类作为id class。id class必须符合以下要求:类必须声明为public,并提供一个声明为public的空构造函数。必须实现Serializable接,覆写 equals()和hashCode()方法。entity class的所有id field在id class都要定义,且类型一样。

在类名上@Entity@IdClass(TeacherPK.class)

在联合主键的两个属性上分别@Id@Id

   public class EmployeePK implements java.io.Serializable{
      String empName;
      Integer empAge;
       publicEmployeePK(){}
       publicboolean equals(Object obj){ ......}
      public int hashCode(){......}
   }

   @IdClass(EmployeePK.class)
   @Entity
   public class Employee {
       @Id String empName;
       @Id Integer empAge;
   }

 5、

关联关系中:

@OneToOne

@OneToMany

@ManyToOne

@ManyToMany

6、 

@JoinColumn

如果在entity class的field上定义了关系(one2one或one2many等),我们通过JoinColumn来定义关系的属性。

name:列名。

referencedColumnName:该列指向列的列名(建表时该列作为外键列指向关系另一端的指定列)

unique: 是否唯一

nullable: 是否允许为空

insertable: 是否允许插入

updatable: 是否允许更新

columnDefinition: 定义建表时创建此列的DDL

secondaryTable: 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。

下面的代码说明Husband和Wife是一对一关系。在Husband对应的映射表建一个名为wifeid的列,该列作为外键指向Wife对应表中的主键id。

public class Husband{

         privateWife wife;

   @OneToOne

         @JoinColumn(name="wifeid")

         publicWife getWife () {

                   returnwife;

         }

 7、

@JoinColumns

如果在entity class的field上定义了关系(one2one或one2many等),并且关系存在多个JoinColumn,用JoinColumns定义多个JoinColumn的属性。

元数据属性说明:

value: 定义JoinColumn数组,指定每个JoinColumn的属性。

下面的代码说明Husband和Wife是一对一关系。在Husband对应的映射表建两列,一个名为wifeid的列,该列作为外键指向Wife对应表中的主键id;另一个为wifename的列,该列作为外键指向Wife对应表中的主键name。

public class Husband{

         privateWife wife;

@OneToOne

         @JoinColumns({

             @JoinColumn(name="wifeid",referencedColumnName="id"),

             @JoinColumn(name="wifename",referencedColumnName="name")

         })

         publicWife getWife () {

                   returnwife;

         }

 8、

@JoinTable

JoinTable在many-to-many关系的所有者一边定义。如果没有定义JoinTable,使用JoinTable的默认值。

元数据属性说明:

  • name:这个join table的名字。
  • joinColumns:定义指向所有者主表的外键列,数据类型是JoinColumn数组。
  • inverseJoinColumns:定义指向非所有者主表的外键列,数据类型是JoinColumn数组。

下面的teacher类代码定义了一个连接表teacher和student的join table。join table的表名是teacher_student,包含两个外键,一个外键是t_ID,指向表teacher的主键ID,另一个外键是s_ID,指向表student的主键ID。其中referencedColumnName可以省略。

public class Teacher{

 private Set<Student> students = new HashSer<Student>();   

 @ManyToMany                                                                        

  @JoinTable(

    name=”teacher_student”,

    joinColumns=@JoinColumn(name="t_ID",referencedColumnName="id"),

    inverseJoinColumns=@JoinColumn(name="s_ID",referencedColumnName="id")

    )

  public  Set<Student> getStudents(){

    return students;

  }