JPA主鍵生成策略

JPA默認提供了四種主鍵生成策略。
(1) GeneratorType.AUTO:容器自動生成
(2) GenerationType.IDENTITY :使用數據庫的自動增長字段生成,JPA容器將使用數據庫的自增長字段爲新增的

實體對象賦唯一值,這種情況下,需要數據庫本身提供自增長字段屬性,支持該屬性的DB有:SQL Server、DB2、

MySQL、Derby等支持。

(3) GenerationType.SEQUENCE:使用數據庫的序列號爲新增加的實體對象賦唯一值, 這種情況下需要數據庫提供

對序列號的支持常用的數據庫中,Oracle支持。

(4) GenerationType.TABLE :使用數據庫表的字段生成,表示使用數據庫中指定表的某個字段記錄實體對象的標識,

通過該字段的增長爲新增加的實體對象賦唯一值

JPA是實現使用舉例:
1. GeneratorType.AUTO

    (1) OpenJPA

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

    (2) Hibernate:Eclipse會提示錯誤,但是程序是可以運行的

    @Id
    @GenericGenerator(name = "test", strategy = "uuid")
    @GeneratedValue(generator = "test")

    說明:這中主鍵生成策略均跟實現有關係,不易於前移,推薦使用用:

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

2. GenerationType.IDENTITY

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long accountId;

    如果是在Derby數據庫中,則需要定義字段

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

    而在MySQL中不需要。

3. GenerationType.TABLE

    (1) Hibernate: 需要創建生成主鍵的表

    @TableGenerator(name = "testId", table = "IDTABLE", 
                pkColumnName = "KEYID", valueColumnName = "KEYVALUE", pkColumnValue =  

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

    CREATE TABLE IDTABLE (
          KEYID VARCHAR(255) NOT NULL, 
          KEYVALUE BIGINT, 
          PRIMARY KEY (KEYID)
    );

    (2) JPA實現:數據庫中沒有該表將會自動生成


轉載地址:http://springsfeng.iteye.com/blog/1271590

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章