提问人:Ayoub Hammami 提问时间:3/25/2020 最后编辑:Sariq ShaikhAyoub Hammami 更新时间:10/9/2023 访问量:3392
在 Spring Boot 实体中管理字符串 ID 序列
Manage String id sequence in spring boot entity
问:
我正在研究 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;
但是在持久化一个新实体时,我收到错误: ids 的未知整数数据类型:java.lang.String 有人可以帮我吗?
答:
0赞
Sunshine
3/25/2020
#1
尝试删除@GeneratedValue和@SequenceGenerator
此外,将自动设置备注,@Id以便您可以将它们从@Column中删除。unique=true, nullable = false,updatable = false
否则,您可以查看本文,了解有关创建自定义字符串生成器的更多详细信息 https://vladmihalcea.com/how-to-implement-a-custom-string-based-sequence-identifier-generator-with-hibernate/
评论
0赞
Ayoub Hammami
3/25/2020
谢谢,但是如果我按照您的要求进行操作,我会遇到错误ORA-01400:无法在id中插入NULL
0赞
Ayoub Hammami
3/25/2020
我删除了两行: @SequenceGenerator(name=“SEQ_ID”, sequenceName = “SEQ_ID” ) @GeneratedValue(strategy=GenerationType.SEQUENCE, generator=“SEQ_ID”)
0赞
Sunshine
3/25/2020
好的,删除它们后,尝试添加您的实体代码,但您必须处理生成相同的 id 异常。否则,您可以按照上述教程进行操作。@PrePersist private void ensureId(){ this.setId(UUID.randomUUID().toString()); }
0赞
pranit patil
4/28/2023
#2
您必须编写自定义序列字符串生成器类,并将该类添加为策略,如下所示@GenericGenerator
public class foo implements IdentifierGenerator {
@Override
public Serilizable generate(SharedSessioContractImplementor session, Object object){
return session.createSQLQuery(select foo_seq_name.nextval from all_sequences where SEQUENCE_NAME='foo_seq_name').getSingleResult().toString;
}
实体类应如下所示:
@Id
@GenericGenerator(name="seq_id" strategy = "foo")
@GeneratedValue(generator="seq_id")
private String foo_id;
}
下一个:JPA 实体序列生成
评论