天天看點

JPA注解簡介

@Entity  

作用:設定一個類為實體類

@Table 

作用:設定實體類對應的表,常與@Entity一起使用

參數:name制定表名,不寫的話,為實體類的類名

@Id 

作用:設定對象辨別符

@GeneratedValue 

作用:設定辨別符的生成政策,常與@Id一起使用

參數:strategy指定具體的生成政策

@GeneratedValue(strategy=GenerationType.AUTO) 使用資料庫預設配置。

@GeneratedValue(strategy = GenerationType.IDENTITY)指定“自動增長”政策,适用于MySQL。

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_tbl_user")指定“序列”政策,适用于Oracle。 

  1. @Entity  
  2. @Table(name = "tbl_user")  
  3. public class User {  
  4.  @Id
  5.  @GeneratedValue 
  6.  private Integer id;
  7. }  

@Column 

作用:設定列

參數:

name:指定列名

unique:指定唯一限制

nullable:指定是否允許為空

inserttable:是否可以插入  

updateable:是否可以更新  

columnDefinition: 定義建表時建立此列的DDL  

length:長度

  1. @Column(name = "user_name", length = 255, nullable = true, unique = true)  
  2. private String name;  

這樣,對應字段就可以按照指定的精度進行insert。可以對double等資料處理。

@Temporal 

作用:設定日期時間

方式一:@Temporal(TemporalType.DATE)映射為日期 // birthday date (隻有日期)

方式二:@Temporal(TemporalType.TIME)映射為日期 // birthday time (是有時間)

方式三:@Temporal(TemporalType.TIMESTAMP)映射為日期 //birthday datetime (日期+時間)

@Lob 

作用:設定大資料類型

方式一:

Java代碼  

JPA注解簡介
  1. @Lob  
  2. private String text;   //text longtext  

方式二:

Java代碼  

JPA注解簡介
  1. @Lob  
  2. private byte[] image;   // image longblob  

@Enumerated 

作用:設定枚舉類型

方式一:

Java代碼  

JPA注解簡介
  1.     @Enumerated(EnumType.STRING)  
  2.     private Role role;  

方式二:

Java代碼  

JPA注解簡介
  1.     @Enumerated(EnumType.ORDINAL)  
  2.     private Role role;  

上面定義的枚舉:Role

Java代碼  

JPA注解簡介
  1. public enum Role {  
  2.     遊客, 會員, 管理者  
  3. }  

使用:

Java代碼  

JPA注解簡介
  1. User user = new User();  
  2. user.setRole(Role.管理者);  

@Transient 

作用:修飾的字段不會被持久化

Java代碼  

JPA注解簡介
  1. @Transient  
  2. private String temp;   

這樣也可以:

Java代碼  

JPA注解簡介
  1. private transient String temp;  

以上都這都是比較常用的。

 @OrderBy(name = "group_name ASC, name DESC")    

 @OneToMany(cascade = CascadeType.ALL, mappedBy = "oneId")//指向多的那方的pojo的關聯外鍵字段 

@ManyToMany       

@JoinTable(name = "TMANY1_TMANY2", joinColumns = {@JoinColumn(name = "MANYA_ID", referencedColumnName = "MANYA_ID")

@Pattern String 

通過正規表達式來驗證字元串 

@Pattern(regex="[a-z]{6}") 

@Email 

@Min 

@Max 

@JoinColumn标記

GenerateValue的機制 strategy

比較特殊的地方

1. 使用UUID(兩個不同實作版本Hibernate和OpenJPA有點不同)

  OpenJPA

   @GeneratedValue(strategy=GenerationType.AUTO, generator = "uuid")

  Hibernate(Eclipse會提示錯誤,但是程式是可以運作的)

   @GenericGenerator(name = "test", strategy = "uuid")

   @GeneratedValue(generator = "test")

  其實這兩種辦法我感覺都不是特别好,因為他們跟實作有關系,将來如果要遷移的話會比較麻煩,是以可以直接用java.util.UUID

   user.setUserId(UUID.randomUUID().toString());

2.使用@GeneratedValue(strategy=GenerationType.IDENTITY)

  需要在資料庫(Derby)中這樣定義字段

  USER_ID  BIGINT  NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1)

3.如果使用資料庫表的字段生成---GenerationType.TABLE

  對于Hibernate,需要建立生成主鍵的表,但是OpenJPA不需要,如果沒有會自動生成。

  代碼如下:

   @TableGenerator(name = "test111", table = "IDTABLE",

                pkColumnName = "KEYID", valueColumnName = "KEYVALUE", pkColumnValue = "TestUSER_ID")

   @GeneratedValue(strategy=GenerationType.TABLE, generator="test111")

   CREATE TABLE IDTABLE (

    KEYID VARCHAR(255) NOT NULL,

    KEYVALUE BIGINT,

    PRIMARY KEY (KEYID)

   )

以上的注解全部定義在javax.persistence下面。