gpt4 book ai didi

java - 在使用 spring data jpa 和 rest 时防止 hibernate 在启动时生成所有查询计划

转载 作者:行者123 更新时间:2023-11-30 09:01:47 29 4
gpt4 key购买 nike

我正在使用带有 spring boot 的 spring data jpa、rest、hibernate entitymanager 4.3.6,并且初始化速度太慢。超过1m+。

Hibernate 遍历所有属性,并在启动时生成查询。

我怎样才能避免这种情况?

日志: Log file on github gist

Bean 定义:

@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) {


LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
em.setDataSource(dataSource);
em.setPackagesToScan("com.ceram1.openauth.persistence.model");

JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
em.setJpaVendorAdapter(vendorAdapter);
em.setJpaProperties(additionalProperties());
em.setSharedCacheMode(SharedCacheMode.ALL);
return em;
}

属性配置:

    p.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false");
p.setProperty("hibernate.query.startup_check", "false");
p.setProperty("hibernate.show_sql", "true");
p.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5InnoDBDialect");
p.setProperty("jadira.usertype.autoRegisterUserTypes", "true");
p.setProperty("hibernate.connection.CharSet", "utf8");
p.setProperty("hibernate.connection.characterEncoding", "utf8");
p.setProperty("hibernate.connection.useUnicode", "true");
p.setProperty("hibernate.cache.use_second_level_cache", "false");
p.setProperty("hibernate.cache.use_query_cache", "false");

最佳答案

您可以通过为每个您不希望在启动时为其生成查询的类放置注释 Entity(dynamicInsert=true, dynamicUpdate=true) 来做到这一点。这是冗长的编码部分。但如果你想要的话会有帮助。

引用:Hibernate Recipe 书。

但这在运行时存在性能问题:Why does Hibernate set dynamic insert=false by default

这是另一个链接:@DynamicInsert @DynamicUpdate does not work?

关于java - 在使用 spring data jpa 和 rest 时防止 hibernate 在启动时生成所有查询计划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26255313/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com