【问题标题】:Springboot2 JPA use DB default sequence for IdSpringboot2 JPA 对 Id 使用 DB 默认序列
【发布时间】:2021-08-17 17:26:30
【问题描述】:

我正在使用 SpringBoot2 来创建微服务。我用于实体的数据库表是在主键的数据库级别使用默认序列定义的。如下所示,

CREATE TABLE EMPLOYEE (
EMP_ID INTEGER GENERATED BY DEFAULT AS IDENTITY (START WITH 1 .....) NOT NULL,
EMP_NAME VARCHAR2(100 BYTE))

我希望spring boot data jpa对emp id使用上述默认序列

@Entity
@Table(name="EMPLOYEE")
public class Employee {

@Id
@Column(name = "EMP_ID", insertable = false)   
private Integer empId;

@Column(name = "EMP_NAME", insertable = false) 
private String empName
}

我希望从创建表查询中添加的默认序列生成 empId。我尝试了 GeneratedValue 中的所有策略,但它不起作用。我只剩下创建显式序列并在序列生成器中使用它。

【问题讨论】:

  • @GeneratedValue(strategy = GenerationType.IDENTITY) 应该可以解决问题,因为它依赖于自动递增的数据库列,并让数据库在每次插入操作时生成一个新值。但是,如果您尝试了所有策略但都不起作用,那实际上很奇怪。你在尝试这个策略时得到了什么?
  • stackoverflow.com/questions/57767571/… 这能解决你的问题吗?
  • 请注意,我们更喜欢这里的技术写作风格。我们轻轻地劝阻问候,希望你能帮助,谢谢,提前感谢,感谢信,问候,亲切的问候,签名,请你能帮助,聊天材料和缩写 txtspk,恳求,你多久了被卡住、投票建议、元评论等。只需解释您的问题,并展示您尝试过的内容、预期的内容以及实际发生的情况。

标签: spring-boot jpa spring-data-jpa spring-boot-2


【解决方案1】:
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "EMP_ID", insertable = false)   
private Integer empId;

【讨论】:

  • 尝试使用 AUTO 策略,hibernate 尝试执行 - 从 dual 中选择 hibernate_sequence.nextval 并抛出 hibernate_sequence 不存在而不是从默认序列中获取的错误。
【解决方案2】:

请尝试以下操作,它应该可以按您的预期工作。

     @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(nullable = false, columnDefinition = "INTEGER GENERATED BY DEFAULT AS IDENTITY NOT NULL")
    private Integer empId;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-24
    • 2014-11-01
    • 2014-10-06
    相关资源
    最近更新 更多