java - javax.persistence.SequenceGenerator和分配大小

标签 java oracle hibernate jpa spring-data-jpa

我们都知道使用@SequenceGenerator时Hibernate的默认行为-它使实际数据库序列增加一,将此值乘以50(默认分配大小值)-然后将该值用作实体ID。因此,第一个问题是为什么休眠模式将从数据库中获取的序列号与分配大小相乘?

第二,在Spring / Hibernate应用程序和ETL作业同时将数据插入同一表的情况下,如何摆脱约束冲突异常?

还可以看到表中序列值的巨大差距,对此也有什么解决方案。

仅供参考,我们在应用程序中使用以下注释使用Oracle数据库中定义的序列生成主键列的值:

@Id
@SequenceGenerator(name = "seqGenerator", sequenceName = "SEQ_table1")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;

最佳答案

您在@SequenceGenerator中添加allocationSize = 1:

@Id
@SequenceGenerator(name = "seqGenerator", sequenceName = "SEQ_table1", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seqGenerator")
private Long id;

关于java - javax.persistence.SequenceGenerator和分配大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36027451/

相关文章:

java - 使用空字符串而不是 null - 一个好的做法?

java - 使用动态数据源进行动态数据源路由

java - visualvm intellij "Failed to create JMX connection to target application"分析不工作

Java 如何确定进入UDP服务器的数据类型? XML 二进制

java - 正确处理 Intents 以修复 ActivityNotFoundException

java - Grails3 单元测试不适用于 Multi-Tenancy

java - org.jmock.Mock 不再可用?

sql - Oracle SQL Like 不适用于带连字符的单词

mysql - 使用 group by 的 SQL 选择查询

oracle - 拆分字符串并迭代存储过程中的每个值