資料的唯一性是所有應用程式非常基本的要求,由開發人員或者使用者來維護這種 唯一性存在著較大的風險,因此,由系統自動產生唯一標識是一種常見的做法。 OpenJPA 中支援四種不同的實體標識自動建置原則:
容器自動產生的實體 標識;
使用資料庫的自動成長欄位產生實體標識;
根據資料庫序 列號(Sequence)技術產生實體標識;
使用資料庫表的欄位產生實體標識 ;
這四種方式各有優缺點,開發人員可以根據實際情況進行選擇。
可選擇的注釋
要讓容器和資料庫結合管理實體標識的自動產生,根據實際 情況的不同,開發人員可以選擇 javax.persistence.* 包下面的 GeneratedValue 、SequenceGenerator、TableGenerator 三個注釋來描述實體的識別欄位。
@javax.persistence.GeneratedValue
每一個需要自動產生實體標 識的實體都需要為它的實體識別欄位提供 GeneratedValue 注釋和相應的參數, OpenJPA 架構會根據注釋和參數來處理實體標識的自動產生。
使用 GeneratedValue 注釋自動產生的實體標識可以是數實值型別欄位如 byte、short、 int、long 等,或者它們對應的封裝器類型 Byte、Short、Integer、Long 等, 也可以是字串類型。
GeneratedValue 注釋可以支援兩個屬性 strategy 和 generator。
strategy
strategy 是 GenerationType 類型的枚 舉值,它的內容將指定 OpenJPA 容器自動產生實體標識的方式。strategy 屬性 可以是下列枚舉值:
GeneratorType.AUTO
表示實體標識由 OpenJPA 容器自動產生,這也是 Strategy 屬性的預設值。
GenerationType.IDENTITY
OpenJPA 容器將使用資料庫的自增長字 段為新增加的實體物件賦唯一值,作為實體的標識。這種情況下需要資料庫提供 對自增長欄位的支援,常用的資料庫中,HSQL、SQL Server、MySQL、DB2、Derby 等資料庫都能夠提供這種支援。
GenerationType.SEQUENCE
表示使用資料庫的序號為新增加的實體對 象賦唯一值,作為實體的標識。這種情況下需要資料庫提供對序號的支援,常 用的資料庫中,Oracle、PostgreSQL 等資料庫都能夠提供這種支援。
GenerationType.TABLE
表示使用資料庫中指定表的某個欄位記錄實體 對象的標識,通過該欄位的增長為新增加的實體物件賦唯一值,作為實體的標識 。