2013-12-10 40 views
1

我有一個使用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 可能不會被使用。因此,這種策略並不保證在序列值中不會有間隙。

回答

-1

這將使用您序列中的下一個值P_REC_ID_SEQUENCE

這也取決於你使用的數據庫。您可以在Postgres中定義序列,但不能在MySQL中定義序列。

如果您使用的是MYSQL,那麼您可以使用Auto-Incremement,但不需要定義序列。

如果您使用ORACLE數據庫定義序列

CREATE SEQUENCE emp_sequence 
     INCREMENT BY 1 
     START WITH 1 

現在,如果當前的序列值是100,則下一個會是101,我希望這是有道理的。

+0

@ Makky.We正在使用oracle數據庫。另外通過下一個值ü平均值重新由P_REC_ID_SEQUENCE權利? – user93796

+0

是的。從您的P_REC_ID_SEQUENCE返回的下一個值。 – Makky

相關問題