我有一個使用JPA註解來生成DB主要key.A DB序列用於使用Oracle DBJPA與SequenceGenerator和GeneratedValue
@Id
@Column(name = "rec_id", scale = 0)
@GeneratedValue(generator = "RecIdSequence", strategy = GenerationType.SEQUENCE)
@SequenceGenerator(name = "RecIdSequence", sequenceName = "P_REC_ID_SEQUENCE")
public Long getRecordId() {
return outboundPackageRecordId;
}
現在我的這種理解是產生PK.Am代碼:由DB定序器返回的序列ID用作rec_id。 這是正確的嗎?
DOC表示:
的序列策略 序列策略由兩個部分組成 - 定義名爲序列和在一個一個或多個字段或 多個類使用命名的序列。 @SequenceGenerator註釋用於定義一個 序列並接受一個名稱,一個初始值(默認值爲1)和一個分配大小(默認值爲50)。一個序列是 應用程序的全局序列,可用於一個或多個 類中的一個或多個字段。在SEQUENCE策略在@GeneratedValue 註釋用於給定的字段附加到先前定義的命名 序列:
@Entity
@SequenceGenerator(name="seq", initialValue=1, allocationSize=100) // Define a sequence - might also be in another class:
public class EntityWithSequenceId {
// Use the sequence that is defined above:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
@Id long id;
}
不同於AUTO和IDENTITY,序列策略就產生一個自動 值作爲新的實體對象被持久化(即在提交之前 )。當前面需要主鍵值 時,這可能很有用。爲了儘量減少數據庫服務器的往返次數,分組的ID號爲 。每個分配中ID的數量由allocationSize屬性指定爲 。某些給定分配中的某些ID 可能不會被使用。因此,這種策略並不保證在序列值中不會有間隙。
@ Makky.We正在使用oracle數據庫。另外通過下一個值ü平均值重新由P_REC_ID_SEQUENCE權利? – user93796
是的。從您的P_REC_ID_SEQUENCE返回的下一個值。 – Makky