首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在hibernate-5中使用自定义表序列?

如何在hibernate-5中使用自定义表序列?
EN

Stack Overflow用户
提问于 2016-08-09 18:22:22
回答 2查看 1.2K关注 0票数 1

我有一个现有的数据库,它具有以下模式和序列:

代码语言:javascript
复制
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映射使用以下序列:

代码语言:javascript
复制
@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 DB中!

为什么?

EN

回答 2

Stack Overflow用户

发布于 2016-08-09 18:58:36

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2016-08-09 19:47:13

正确的注解应该是:

代码语言:javascript
复制
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="my_generator")
@SequenceGenerator(name="my_generator", sequenceName="my_seq", allocationSize=1, initialValue=1)

如果你只是在数据库上有序列,hibernate不会覆盖它。要更改序列,可以从数据库中删除并在hibernate.cfg.xml中更改

代码语言:javascript
复制
<property name="hibernate.hbm2ddl.auto">update</property>

update更新数据库或create删除全部并再次创建(表和序列)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38848158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档