Hibernate 6.1.x / Spring Boot:避免创建全局临时表

问题描述 投票:0回答:3

Hibernate 为批量操作创建临时表。

我们使用的是 Oracle (v19.0.0.0.0),我们的用户没有创建临时表的权限。

我尝试了很多不同的配置,但是

HTE_
表仍然在启动时创建:

09:07:43.658 INFO  [com.zaxxer.hikari.HikariDataSource      ] HikariPool-1 - Starting...
09:07:44.285 INFO  [com.zaxxer.hikari.pool.HikariPool       ] HikariPool-1 - Added connection oracle.jdbc.driver.T4CConnection@6dc5e857
09:07:44.286 INFO  [com.zaxxer.hikari.HikariDataSource      ] HikariPool-1 - Start completed.
09:07:44.596 INFO  [SQL dialect                             ] HHH000400: Using dialect: org.hibernate.dialect.Oracle12cDialect
Hibernate: create global temporary table HTE_xxxxx(...) on commit delete rows
Hibernate: create global temporary table HTE_yyyyy(...) on commit delete rows
09:07:45.551 INFO  [j.LocalContainerEntityManagerFactoryBean] Initialized JPA EntityManagerFactory for persistence unit 'default'

这些配置不起作用:

spring.jpa.properties.hibernate.query.mutation_strategy=org.hibernate.query.sqm.mutation.internal.temptable.LocalTemporaryTableMutationStrategy

OR 

spring.jpa.properties.hibernate.query.mutation_strategy=org.hibernate.query.sqm.mutation.internal.inline.InlineMutationStrategy
spring.jpa.properties.hibernate.query.insert_strategy=org.hibernate.query.sqm.mutation.internal.temptable.LocalTemporaryTableInsertStrategy

我正在使用 Hibernate 6.1.7.FinalSpring Boot 3.0.6

我在文档中没有找到其他方法:https://docs.jboss.org/hibernate/stable/orm/userguide/html_single/Hibernate_User_Guide.html

java spring spring-boot hibernate jpa
3个回答
1
投票

我面临着同样的问题 - 解决方案很简单并且隐藏在 hibernate 文档迁移中: https://docs.jboss.org/hibernate/orm/6.0/migration-guide/migration-guide.html

请注意,配置属性 hibernate.hql.bulk_id_strategy 已更改为 hibernate.query.mutation_strategy,它现在将引用实现的类或对象

所以答案例如:

hibernate.query.mutation_strategy=org.hibernate.query.sqm.mutation.internal.inline.InlineMutationStrategy
hibernate.query.mutation_strategy.global_temporary.create_tables=false
hibernate.query.mutation_strategy.global_temporary.drop_tables=false

0
投票

这是一个 Hibernate 问题,已在

6.2.0
中解决:

除了 hibernate.hql.bulk_id_strategy.global_temporary.drop_tables 和 hibernate.hql.bulk_id_strategy.persistent.drop_tables设置,添加一个 create_tables 变体允许控制是否创建 表。默认情况下保持 true 以保持向后兼容性。

Spring Boot 3.1 升级到 Hibernate 6.2,因此将 SB 升级到

3.1.x
可以解决该问题。


0
投票

我也遇到过同样的问题。如果您在表中使用了这些 @GenerateValue(strategy = GenerationType.AUTO) 属性,则按序列替换它,@GenerateValue(strategy = GenerationType.SEQUENCE, Generator = "your_parameter_name") @SequenceGenerator(sequenceName = "your_sequence_name", allocationSize = 1, name = "your_parameter_name")

© www.soinside.com 2019 - 2024. All rights reserved.