Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA仅在创建之前在数据库端生成id_Java_Postgresql_Hibernate_Jpa_Spring Data Jpa - Fatal编程技术网

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

Java Spring数据JPA仅在创建之前在数据库端生成id,java,postgresql,hibernate,jpa,spring-data-jpa,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 =

在我的应用程序中,我将字符串数据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
来避免冲突,因为我将有多个应用程序实例,它们将与同一个数据库一起工作

但在这种情况下,每次创建
权限之前,应用程序都会向数据库
perm_id_seq
序列发出请求,以接收下一个值。我想纯粹在数据库端创建
id
,就像使用
jdbc模板时一样。为此,我为
id
=
nextval('perm\u id\u 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将在DB端生成标识列的id:

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Short id;