jpa常用註解講解

本文主要講解jpa中常用的註解,如果在平時的使用中用到了新的註解,也會及時更新,方便查閱及複習。

使用在類上的註解:

  • @Entity:該註解標註在類上,以標識該類爲一個實體類,可以交由jpa進行管理。

  • @Table:該註解標註在類上,主要作用是定義該實體對應在數據庫中的信息,有以下幾個常用屬性:
    name:定義該實體對應數據庫的表名,如果不指定,則使用類名作爲表名;
    catalog:用於指定數據庫實例名。如果不指定,新建的表則出現在數據庫連接url指定的數據庫中;
    schema:作用與catalog相同;
    indexes:用於對錶字段建立索引。如:indexes={@Index(name=”idx_name_address”, unique=false, columnList=”name,address”)}
    uniqueConstraints:指定表的唯一性約束。可建立多個唯一性約束。如:uniqueConstraints={@UniqueConstraint(columnNames={“col1”,”col2”}),@UniqueConstraint(columnNames={“col3”,”col4”})}

  • @Inheritance:該註解在實體間存在繼承關係的情況下使用,標註在父類上,以配置父類的屬性與子類的屬性在數據庫中如何保存,只有strategy屬性:
    strategy:指定父類的屬性與子類的屬性在數據庫中保存的策略,取值爲枚舉值,主要有以下3類取值:
    (1)、InheritanceType.SINGLE_TABLE:父類的屬性和子類的屬性都保存在同一個表中;
    (2)、InheritanceType.TABLE_PER_CLASS:父類屬性和子類的屬性保存在不同的表,但是子類對應的表會保存父類的屬性;
    (3)、InheritanceType.JOINED:父類屬性和子類的屬性保存在不同的表,但是子類對應的表不保存父類的屬性,只保存父類對應數據的ID,即外鍵;
  • @DiscriminatorColumn:該註解在實體間存在繼承關係的情況下使用,目的是定義一列表別列,以區分某條數據是屬於哪個實體的數據。該註解當設置了父類的屬性與子類的屬性存放在同一張表中,即以上說的InheritanceType.SINGLE_TABLE策略時使用。該註解有以下幾個常用屬性:
    name:定義辨別列的名稱;
    discriminatorType:定義辨別列的類型(DiscriminatorType.STRING, DiscriminatorType.Char、DiscriminatorType.INTEGER);
    length:定義辨別列的長度;
  • @DiscriminatorValue:與@DiscriminatorColumn配合使用,定義辨別列的值;
  • @PrimaryKeyJoinColumn:當實體繼承關係的保存策略選擇InheritanceType.JOINED時,子類使用該註解,以配置外鍵關聯字段的信息,主要有以下幾個常用屬性:
    name:子類對應的表外鍵列名稱;
    referencedColumnName:引用的外鍵表列名;

使用在屬性上的註解:

  • @Column:標註在類的屬性上,該註解可以指定該屬性在數據庫中對應列的配置信息。有以下幾個常用屬性:
    name:指定該屬性對應在數據庫中的列名;
    nullable:指定該屬性在數據庫對應的列是否可空;
    length:指定該屬性在數據庫對應的列長度;
    scale:指定數值類型列的位數
    precision:指定數值類型列的精度;
    unique:指定列是否是唯一
  • @Id:該註解標註在類的屬性上,以標識該屬性爲主鍵。
  • @GenerateValue:該註解標註在類的屬性上,配合@Id使用,作用在於指定主鍵的生成策略。有以下幾個常用屬性:
    stategy:指定生成主鍵的策略,枚舉值,可取值有:GenerationType.AUTO、GenerationType.IDENTITY、GenerationType.SEQUENCE、GenerationType.TABLE;
    generator:指定生成主鍵的生成器,如果使用生成器的方式生成主鍵,還需要在主鍵字段上使用@GenericGenerator註解聲明主鍵生成器使用的生成策略。由於生成器由實現持久化的具體提供者提供,不是jpa提供,所以如果使用生成器策略生成主鍵,可能會影響到系統的移植性。
  • @Temporal:該註解必須標註在日期類型的字段上,以標識該屬性是哪種日期類型,該註解接收一個參數,可選值有:TemporalType.DATE、TemporalType.TIME、TemporalType.TIMESTAMP
  • @Enumerated:該註解標註在類的屬性上,以標識該屬性爲枚舉類型。該註解接收一個參數,以指定該枚舉屬性保存到數據庫中是保存枚舉對應的索引還是具體的枚舉值。參數值可以爲EnumType.ORDINAL或者EnumType.STRING
  • @Transient:該註解標註在類的屬性上,以標識該屬性不需要持久化到數據庫中
  • @Basic:該註解標註在類的屬性上,用於指定基本的信息,有以下幾個常用屬性:
    fetch:指定該屬性的在查詢時的抓取策略,抓取策略有FetchType.LAZY(懶加載)和FetchType.EAGER;
    optional:指定該屬性對應的列是否可空,默認爲true
  • @Lob:該註解標註在類的屬性上,以標識該屬性爲大文本類型。
  • @OneToOne:指定該實體與該屬性對應的實體爲一對一的對應關係,主要有以下幾個常用屬性:
    cascade:屬性的抓取策略,枚舉值,可取的值有:CascadeType.REFRESH, CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST;
    optional:指定實體的關聯關係是否是可選的,默認爲true;
    fetch:指定該實體的抓取策略;
    mappedBy:該屬性用在關係被維護方,值就是關係維護方對應的屬於關係被維護方的那個屬性;
    targetEntity:指定關聯關係的class;
    orphanRemoval:指定移除了對應的實體關聯關係時,是否移除相應的實體。
  • @JoinColumn:該註解用在關係的維護方,指定保存外鍵值的列名,需要配合@OneToOne使用。只有一個屬性:
    name,指定保存外鍵值的列名
  • @ManyToOne、@OneToMany、@ManyToMany的屬性與@OneToOne屬性一致,不再累述。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章