2012-03-28 62 views
4

我有一個麻煩生成ID對新的實體,我想:如何註釋id,使其不含SEQUENCE表的自動增量?

@Id 
@GeneratedValue 
private Long myId; 

@Id 
@GeneratedValue(generator="increment") 
@GenericGenerator(name="increment", strategy = "increment") 
private Long myId; 

entityManager.persist我得到Table "SEQUENCE" not found 在純休眠generator class="increment"爲我工作就好了。

+0

? – joel1di1 2012-03-28 14:46:41

+0

H2數據庫。生成器類=「增量」工作在純休眠 – bunnyjesse112 2012-03-28 14:48:11

回答

13

你可以在數據庫中定義身份識別碼爲自動遞增/標識列和註釋下面的方式相應字段的實體:

@Id 
@GeneratedValue(strategy = GenerationType.IDENTITY) 
private Long myId; 

這一工程至少與H2 1.3.160 &休眠3.6.8。

+0

謝謝!! – bunnyjesse112 2012-03-29 06:11:54

+0

我想強調它有多重要數據庫列被定義爲AUTO_INCREMENT。 – Noumenon 2016-11-10 16:07:22

2

你試試這個..

@Id 
@GeneratedValue(strategy=GenerationType.AUTO) 
private int id; 
+0

試圖查詢SEQUENCE表 – bunnyjesse112 2012-03-28 16:22:32

+0

你使用哪個數據庫?也許這個鏈接可能有更多的信息 - http://stackoverflow.com/questions/2011528/hibernate-auto-increment-id – Prashanth 2012-03-28 16:34:33

+0

h2數據庫.... – bunnyjesse112 2012-03-28 16:34:53

0

如果您想生成多個持久對象之間共享(和唯一)的ID,請使用@TableGenerator。 H2和許多其他數據庫沒有序列的內部支持,所以@SequenceGenerator不起作用。

這裏有一個簡單的例子,有一個獨特的/在兩個對象共享@Id:

@Entity 
public class Class1 { 

    // setting pkColumnValue of TableGenerator is very important ;-) 
    @Id 
    @TableGenerator(
     name = "guid", 
     initialValue = 0, 
     allocationSize = 10, 
     table = "GUID_SEQ", 
     pkColumnName = "GEN_KEY", 
     valueColumnName = "GEN_VALUE", 
     pkColumnValue = "GUID") 
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "guid") 
    private long id; 
} 


@Entity 
public class Class2 { 

    // use the same pkColumnValue 
    @Id 
    @TableGenerator(
     name = "guid", 
     initialValue = 0, 
     allocationSize = 10, 
     table = "GUID_SEQ", 
     pkColumnName = "GEN_KEY", 
     valueColumnName = "GEN_VALUE", 
     pkColumnValue = "GUID") 
    @GeneratedValue(strategy = GenerationType.TABLE, generator = "guid") 
    private long id; 
} 
DB是否使用的是