我使用Hibernate 4来使用映射到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为每个表创建一个序列。
答案 0 :(得分:5)
如果您正在使用最近的Hibernate,请尝试:
@GeneratedValue(strategy = GenerationType.IDENTITY)
如果它仍然使用每个表的序列:
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="mytable_id_seq")
@SequenceGenerator(name="mytable_id_seq", sequenceName="mytable_id_seq", allocationSize=1)