Spring数据JPA仅在创建之前在数据库端生成id

Boh*_*nko 1 java postgresql hibernate jpa spring-data-jpa

在我的应用程序中,我使用字符串数据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;

    ...........
}
Run Code Online (Sandbox Code Playgroud)

我正在使用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;

    ...........
}
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试保存实体时,它会引发异常:

org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save()
Run Code Online (Sandbox Code Playgroud)

原因对我来说很清楚.但是,有人可以告诉我,是否可以id按照我的意愿在数据库端生成?

Arn*_*aud 7

使用GenerationType.IDENTITY你的ID,这将告诉Hibernate标识列的ID将在数据库方面产生:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Short id;
Run Code Online (Sandbox Code Playgroud)