Запретить спящему режиму генерировать весь план запросов при запуске при использовании весенних данных jpa и остальных

Я использую spring data jpa, rest, hibernate entitymanager 4.3.6 с весенней загрузкой, и инициализация слишком медленная. Более 1м+.

Hibernate просматривает все атрибуты и генерирует запрос при запуске.

Как я могу предотвратить это?

Журнал: файл журнала на github gist

Определение фасоли:

@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");

person ceram1    schedule 08.10.2014    source источник
comment
Это не баг, это фича. Таким образом, вы можете быть уверены, что не будете неприятно удивлены, когда запрос не может быть сгенерирован во время выполнения; и это экономит время после запуска сервера...   -  person Uwe Allner    schedule 08.10.2014
comment
Я знаю, но я хочу отключить его для более быстрой разработки и тестирования.   -  person ceram1    schedule 08.10.2014


Ответы (2)


Вы можете сделать это, поместив аннотацию Entity(dynamicInsert=true, dynamicUpdate=true) для каждого класса, для которого вы не хотите, чтобы запрос генерировался при запуске. Это длинная часть кода. Но будет полезно, если вы этого хотите.

Ссылка: Книга рецептов Hibernate.

Но здесь есть проблемы с производительностью во время выполнения: Почему Hibernate устанавливает динамическую вставку=false на по умолчанию

Вот еще одна ссылка: @DynamicInsert @DynamicUpdate не работает?

person Sushant Tambare    schedule 08.10.2014
comment
Спасибо за полезную информацию, но я не могу применить ее к своему проекту. Это не работает, даже если я использую 4.3.6.Final. - person ceram1; 08.10.2014

Извините, название вопроса было неправильным. Это было медленно из-за jadira (пользовательский тип гибернации).

Теперь я заметил, что генерация запроса происходит очень быстро.. (Hibernate намного быстрее меня)

person ceram1    schedule 12.10.2014