【问题标题】:Manage String id sequence in spring boot entity在 Spring Boot 实体中管理 String id 序列
【发布时间】:2020-07-05 22:11:47
【问题描述】:

我正在使用 Oracle 数据库来管理具有字符串主键的 JPA 实体。 我无法将 PK 上的类型修改为数据库中的 Long 或 int,所以我想知道如何在我的 JPA 实体中配置 pk 序列, 我试过这个:

@Id
@SequenceGenerator(name="SEQ_ID", sequenceName = "SEQ_ID" )
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_ID")
@Column(name="SEQ_ID",unique=true, nullable = false,updatable = false)
private String id;

但是在持久化一个新实体时出现错误:ID 的未知整数数据类型:java.lang.String 有人可以帮帮我吗?

【问题讨论】:

    标签: oracle hibernate spring-boot jpa sequence


    【解决方案1】:

    尝试删除@GeneratedValue 和@SequenceGenerator 另外,请注意,@Id 会自动设置unique=true, nullable = false,updatable = false,因此您可以将它们从@Column 中删除。

    否则,您可以查看本文以了解有关创建自定义字符串生成器https://vladmihalcea.com/how-to-implement-a-custom-string-based-sequence-identifier-generator-with-hibernate/的更多详细信息

    【讨论】:

    • 谢谢,但如果我按照你的建议做,我有错误 ORA-01400: cant insert NULL in id
    • 我删除了这两行:@SequenceGenerator(name="SEQ_ID", sequenceName = "SEQ_ID") @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_ID")
    • 好的,删除它们后,尝试添加您的实体代码@PrePersist private void ensureId(){ this.setId(UUID.randomUUID().toString()); } 但是您必须处理生成相同的 id 异常。否则,您可以按照提到的教程进行操作。
    猜你喜欢
    • 2014-09-10
    • 2023-01-12
    • 2019-01-03
    • 2021-07-12
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2021-09-14
    相关资源
    最近更新 更多