我使用Hibernate4来映射到Postgres数据库。在进行映射之前,我先创建Java实体。然后,我使用一个Java类从我的实体生成sql脚本。这是我的实体:
用户实体
@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为每个表创建序列。
@GeneratedValue(strategy =GenerationType.AUTO)
如果您使用的是最新的休眠模式,请尝试:
@GeneratedValue(strategy = GenerationType.IDENTITY)
如果仍然对每个表使用序列,请使用:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="mytable_id_seq") @SequenceGenerator(name="mytable_id_seq", sequenceName="mytable_id_seq", allocationSize=1)