【问题标题】:Saving null as id, with hibernate [duplicate]将null保存为id,休眠[重复]
【发布时间】:2019-08-15 09:19:53
【问题描述】:

我处于一个奇怪的位置,我需要将@Id@Entity 保存为null

整个项目是使用休眠和实体构建的。但是对于这个遗留实体,表本身有一个触发器来生成 ID。

因此,尝试插入除 null 之外的任何内容都会导致错误。

当尝试.save() 具有空 id 的实体时,休眠将抛出

org.springframework.orm.jpa.JpaSystemException: ids for this class must be manually assigned before calling save()

编辑:

澄清,我需要做.save(),其中 ID 列为空,因为:

表中的触发器将(在任何插入之前)检查 ID 是否为空,然后执行 SELECT 以获取最后一个 ID 并将其增加 1,最后将这个新行插入到表中。如果 ID 不为 null,则触发器将出错。

【问题讨论】:

  • 触发器或序列或身份?
  • 不确定我是否理解。表有触发器,它将选择最后一个 id,然后执行 id+1 并插入它。我尝试了不同的 GenerationType 策略,但似乎都不起作用。没有定序器。

标签: java hibernate jpa null


【解决方案1】:

只需将 id 标记为由底层数据库自动生成:

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

GenerationType.IDENTITY 通常是为 PK 设置为 auto increment 时设计的,但是从 JPA 的角度来看,它只是将生成 id 的职责转移到数据库引擎。这就是通过使用触发器在您的情况下发生的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-16
    • 2014-10-23
    • 2020-10-21
    • 1970-01-01
    • 2021-12-02
    • 2021-12-17
    • 2014-01-31
    • 2011-09-20
    相关资源
    最近更新 更多