2013-05-06 33 views
1

我正在使用hibernate註釋。我想創建一個列爲autoincremented。我在數據庫(oracle)中創建了一個序列,並在java POJO類中映射了該序列。我是否也需要爲該序列創建觸發器?我想知道如何在使用hibernate的時候創建一個自動增量列?在java和數據庫方面我需要做些什麼改變?請幫助我。以下是我已映射序列的代碼部分。oracle中使用休眠的自動增量列

public class SimRuns implements Serializable { 

    private static final long serialVersionUID = 8698324570356602407L; 

    @Id @Column(name = "RUN_ID") 
    @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq_run_id") 
    @SequenceGenerator(name="seq_run_id", sequenceName="seq_run_id") 
    private Long runId; 
} 
+1

你對數據庫端創建的觸發器/序列? – Dropout 2013-05-06 06:47:40

回答

0

嘗試取出發電機和設置自動的generationType

1

這個工作對我來說:

@Id 
@GeneratedValue(generator = "nosicSeq") 
@SequenceGenerator(name = "nosicSeq", sequenceName = "NOSIC_SEQ", allocationSize = 1) 
@Column(name = "SID") 
private BigDecimal sid; 

在DB沒有觸發需要,只是順序。

0
@Id @Column(name = "RUN_ID") 
@GeneratedValue(strategy=GenerationType.AUTO) 
@SequenceGenerator(name="seq_run_id", sequenceName="seq_run_id") 
private Long runId; 

Hibernate可能是唯一一個根據您的數據庫類型選擇正確的生成策略的JPA提供程序。使用GenerationType.AUTO聲明hibernate將嘗試選擇最佳策略來實現增加的行ID。

0
  1. 在Oracle中:它不需要Oracle觸發器,但序列是必須的。

  2. 在POJO:您可以使用標註這樣的:

    @Id @GeneratedValue(策略= GenerationType.SEQUENCE,發電機= 「majorsSeq」) @SequenceGenerator(NAME = 「majorsSeq」,sequenceName =「MAJORS_SEQ」,allocationSize = 1,initialValue = 1) public int getId(){ return id; }