日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

纯JPA 入门小案例(2)

發布時間:2023/12/19 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 纯JPA 入门小案例(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

JPA中的主鍵生成策略

通過annotation(注解)來映射hibernate實體的,基于annotation的hibernate主鍵標識為@Id, 其生成規則由@GeneratedValue設定的.這里的@id和@GeneratedValue都是JPA的標準用法。

JPA提供的四種標準用法為TABLE,SEQUENCE,IDENTITY,AUTO。

具體說明如下:

IDENTITY:主鍵由數據庫自動生成(主要是自動增長型)

用法:

[@Id](https://my.oschina.net/u/3451001) @GeneratedValue(strategy = GenerationType.IDENTITY) private Long custId;

SEQUENCE:根據底層數據庫的序列來生成主鍵,條件是數據庫支持序列。

用法:

@Id @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq") @SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")

private Long custId;

//@SequenceGenerator源碼中的定義 @Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface SequenceGenerator { //表示該表主鍵生成策略的名稱,它被引用在@GeneratedValue中設置的“generator”值中String name(); //屬性表示生成策略用到的數據庫序列名稱。String sequenceName() default ""; //表示主鍵初識值,默認為0int initialValue() default 0; //表示每次主鍵值增加的大小,例如設置1,則表示每次插入新記錄后自動加1,默認為50int allocationSize() default 50; }

AUTO:主鍵由程序控制

用法:

@Id @GeneratedValue(strategy = GenerationType.AUTO) private Long custId;

TABLE:使用一個特定的數據庫表格來保存主鍵

用法:@Id @GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen") @TableGenerator(name = "pk_gen", table="tb_generator", pkColumnName="gen_name", valueColumnName="gen_value", pkColumnValue="PAYABLEMOENY_PK", allocationSize=1 ) private Long custId;//@TableGenerator的定義:@Target({TYPE, METHOD, FIELD}) @Retention(RUNTIME) public @interface TableGenerator { //表示該表主鍵生成策略的名稱,它被引用在@GeneratedValue中設置的“generator”值中String name(); //表示表生成策略所持久化的表名,例如,這里表使用的是數據庫中的“tb_generator”。String table() default ""; //catalog和schema具體指定表所在的目錄名或是數據庫名String catalog() default ""; String schema() default ""; //屬性的值表示在持久化表中,該主鍵生成策略所對應鍵值的名稱。例如在“tb_generator”中將“gen_name”作為主鍵的鍵值String pkColumnName() default ""; //屬性的值表示在持久化表中,該主鍵當前所生成的值,它的值將會隨著每次創建累加。例如,在“tb_generator”中將“gen_value”作為主鍵的值 String valueColumnName() default ""; //屬性的值表示在持久化表中,該生成策略所對應的主鍵。例如在“tb_generator”表中,將“gen_name”的值為“CUSTOMER_PK”。 String pkColumnValue() default ""; //表示主鍵初識值,默認為0。 int initialValue() default 0; //表示每次主鍵值增加的大小,例如設置成1,則表示每次創建新記錄后自動加1,默認為50。int allocationSize() default 50; UniqueConstraint[] uniqueConstraints() default {}; } //這里應用表tb_generator,定義為 :CREATE TABLE tb_generator ( id NUMBER NOT NULL, gen_name VARCHAR2(255) NOT NULL, gen_value NUMBER NOT NULL, PRIMARY KEY(id) )

轉載于:https://my.oschina.net/edisonOnCall/blog/3033284

總結

以上是生活随笔為你收集整理的纯JPA 入门小案例(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。