【问题标题】:Spring data JPA generate id on database side only before createSpring data JPA 仅在创建之前在数据库端生成 id
【发布时间】:2018-06-07 08:31:52
【问题描述】:

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

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

【问题讨论】:

    标签: java postgresql hibernate jpa spring-data-jpa


    【解决方案1】:

    使用GenerationType.IDENTITY作为你的id,这将告诉hibernate标识列的id将在DB端生成:

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

    【讨论】:

      猜你喜欢
      • 2017-11-17
      • 1970-01-01
      • 2016-10-11
      • 1970-01-01
      • 2021-10-24
      • 1970-01-01
      • 2019-07-18
      • 2018-03-16
      • 1970-01-01
      相关资源
      最近更新 更多