2014-02-11 79 views
3

我使用Hibernate 4來使用映射到Postgres數據庫。在做映射之前,我創建了第一個Java實體。然後,我使用java類從我的實體生成sql腳本。這裏是我的實體:Hibernate 4和Postgres:如何爲每個表創建一個序列?

用戶實體

@Entity 
@Table(name="myusers") 
public class User { 


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

    @Column(name="fistname") 
    private String firstName; 

    @Column(name="lastName") 
    private String lastName; 
.... 
} 

項目實體

@Entity 
@Table(name="projects") 
public class Project { 

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

    @Column(name="title") 
    private String title; 

    @Column(name="description") 
    private String description; 
.. 
} 

我注意到@GeneratedValue(strategy = GenerationType.AUTO)產生的表myusers和項目相同的序列。如果我在myusers表上創建第一條記錄,id將有「1」作爲值,然後當我在表項目中創建第一條記錄時,此記錄的id = 2。他們使用兩個相同的序列。 我想知道我不能修改我的實體來指定Hibernate爲每個表創建一個序列。

+0

可能重複:簡述如何@GeneratedValue工程](http://stackoverflow.com/questions/11788483/hibernate-rundown-on-how-generatedvalue-works) –

回答

4

如果你在最近的休眠,請嘗試:

@GeneratedValue(strategy = GenerationType.IDENTITY) 

如果它仍然使用每個表使用的序列:

@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="mytable_id_seq") 
@SequenceGenerator(name="mytable_id_seq", sequenceName="mytable_id_seq", allocationSize=1) 

見[休眠hibernate could not get next sequence value

相關問題