java - 如何在 hibernate-5 中使用自定义表顺序?

标签 java hibernate

我有一个具有以下架构和序列的现有数据库:

CREATE TABLE public.my_table
(
  id bigint NOT NULL,
  ...
  CONSTRAINT travelit_hotels_pkey PRIMARY KEY (id)
);

CREATE SEQUENCE public.my_seq
  INCREMENT 1
  MINVALUE 1
  MAXVALUE 9223372036854775807
  START 500791
  CACHE 1;

我的@Entity映射利用序列:

@Id
@GeneratedValue(generator = "my_seq")
@SequenceGenerator(name = "my_seq", sequenceName = "my_seq")
private Long id;

截至hibernate-5 ,我正在使用以下属性: hibernate.id.new_generator_mappings=true

结果:当我创建一个新实体时,它会分配以下 ID:500744 .

这是<序列的开始,并且已经存在于我的postgres中数据库!

为什么?

最佳答案

当使用hibernate.id.new_generator_mappings = true时,hibernate默认会创建一个INCRMENT 50的序列。

如上所述here ,生成的 id 将是 SEQ-49。这会与使用 hibernate < 5 生成的现有数据库产生冲突。

解决方案:将现有序列生成器的 allocationSize 限制为 1: @SequenceGenerator(..,allocationSize = 1)

关于java - 如何在 hibernate-5 中使用自定义表顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38848158/

相关文章:

java - JSP 声明 scriptlet 访问 bean

java - 组织.hibernate.exception.SQLGrammarException : Table 'XXX' doesn't exist

java - 事务未在 Spring + Hibernate + JPA 设置中创建

java - 有没有办法用 hibernate POJO 映射表函数?

hibernate - Grails条件在集成测试中不起作用

java - 如何判断哪个子进程调用了父进程的方法

java - Hibernate 搜索日期

Java 最好的设计是对象可以不同,但​​做的事情是一样的

java - 带别名的 Hibernate 查询

java - 除非转义,否则在字符串中查找简单模式