在我的应用程序中,我将字符串数据JPA与PostgreSQL一起使用。对于我的应用程序中的所有实体,我正在寻找一种纯粹在数据库端生成id的方法。
例如,我现在的工作版本是:
@Entity
@Table(name = "permissions")
public class PermissionEntity {
@Id
@SequenceGenerator(name="permSeq", sequenceName="perm_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator="permSeq")
private Short id;
...........
}
我使用
allocationSize = 1
来避免冲突,因为我将拥有应用程序的多个实例,这些实例将与同一个数据库一起工作。但在这种情况下,每次创建
permission
之前,应用程序都会向数据库perm_id_seq
序列发出请求,以接收下一个值。我只想在数据库端创建id
,就像在jdbc template
中那样。为此,我设置了id
=nextval('perm_id_seq'::regclass)
的默认值并修改了代码:@Entity
@Table(name = "permissions")
public class PermissionEntity {
@Id
private Short id;
...........
}
现在,当我试图保存实体时,它抛出一个异常:
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()
原因我很清楚。但是,有人能告诉我,是否有可能像我希望的那样在数据库端生成
id
s? 最佳答案
使用GenerationType.IDENTITY
作为您的id,这将告诉hibernate identity列的id将在DB端生成:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Short id;