首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在哪里设置hibernate.id.new_generator_mappings属性?

在哪里设置hibernate.id.new_generator_mappings属性?
EN

Stack Overflow用户
提问于 2017-01-12 04:13:46
回答 2查看 9.5K关注 0票数 2

我在这件事上浪费了太多时间...

我使用的是oracle,并且定义了一个以1为增量的序列(MY_TABLE_SEQ)。

在我的Pojo中我有:

代码语言:javascript
复制
@SequenceGenerator(name = "MY_SEQ", sequenceName="MY_TABLE_SEQ", allocationSize=50)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="MY_SEQ")

这给了我一个独特的约束问题。根据我的理解,我需要设置以下属性:

代码语言:javascript
复制
hibernate.id.new_generator_mappings=true

我已经尝试在我的hibernate.cfg.xml文件中设置,但似乎没有什么不同。我在persistance.xml中遇到过服务器post,但这是一个独立的应用程序,没有网络容器。

设置allocationSize=1是可行的,但当然它会在每次插入时命中db以获得下一个序列。设置上面的属性是为了解决这个问题。

EN

回答 2

Stack Overflow用户

发布于 2017-01-26 05:11:18

我还没有尝试过Oracle,但是我在插入AS400 DB2表时遇到了与您类似的问题。

我不得不删除DB2表中id列的标识标志--而是使用了一个自定义的jpa/hibernate序列生成器。这是在@ID实体字段的pojo/entity注释上设置的,就像您所做的那样。

DB2给了我关于缺少SYSIBM.SYSSEQUENCES表的错误,所以很明显hibernate (5.2版)不能识别原生DB2标识。自定义序列是一种有效的解决方法。

在@ID实体字段中:

@GeneratedValue(生成器=“表”,strategy=GenerationType.TABLE)

@TableGenerator(name = "table",allocationSize = 20)

此示例在每次查询表时分配一个包含20个序列号的池。

接下来,使用与hibernate5应用程序接口匹配的列创建所需的Hibernate needs表-必须小写...因此,在名称两边加引号,以解决DB2默认使用的自动大小写问题。如果这些名称是大写的,API将会出错。

表:"hibernate_sequences“

使用2列的示例:"sequence_next_hi_value“(整数,不可为空,默认为0) "sequence_name”(字符,样本长度为20,不可为空,自然为默认值)

在以编程方式使用的方言配置代码中- ex: Spring Boot,添加以下属性:

false(“false”,"false");properties.put("hibernate.id.new_generator_mappings",“properties.put”);

在*.properties文件中:

spring.jpa.properties.hibernate.dialect.supportsSequences=false spring.jpa.properties.hibernate.id.new_generator_mappings=false

数据库系统区分模式/表/字段名的大小写。还要注意到处都有打字错误,包括。属性名称。

确保您的pojo/实体只包含将映射到表的私有字段。像serialVersionUID这样的静态决赛是可以的。

我很快就会为SQL Server做一些类似的事情。

对于MySQL,我可以使用在表ID字段中定义的标识列来插入记录,因此不必进行所有这些更改。更简单的设置,因为hibernate可以识别MySQL中的标识。@GeneratedValue(strategy=GenerationType.IDENTITY)是pojo中所需的全部内容。

我是个新手,所以总是在寻找更好的方法...但现在这个方法起作用了。

票数 0
EN

Stack Overflow用户

发布于 2019-09-03 03:27:51

我在hibernate.cfg.xml文件中像这样设置了属性,它就可以工作了!

<property name="hibernate.jpa.compliance.global_id_generators" value="true"/>

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

https://stackoverflow.com/questions/41599916

复制
相关文章

相似问题

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