Вы работаете с очень большим ResultSets? Что хранилище вы используете? Я столкнулся с подобными проблемами и это сводилось к настройкам базы данных для спящего режима.
Вот несколько других вопросов, чтобы проверить:
Simple hibernate query returning very slowly
Hibernate queries slow down drastically after an entity is loaded in the session
для спящего режима, я нашел следующие настройки вы можете настройки производительности для повышения производительности:.
// update - Create if schema doesn't exists; update if column doesn't
// exist
// create - Empties the database before creating it
// create-drop - Drops the database when the SessionFactory is closed
config.setProperty("hibernate.hbm2ddl.auto", hbm2ddlMode);
config.setProperty("hibernate.cache.use_query_cache", "true");
config.setProperty("hibernate.cache.use_second_level_cache", "true");
config.setProperty("hibernate.cache.region.factory_class",
"org.hibernate.cache.ehcache.EhCacheRegionFactory");
config.setProperty("hibernate.cache.provider_class",
"org.hibernate.cache.EhCacheProvider");
// config.setProperty("hibernate.cache.provider_class",
// "org.hibernate.cache.NoCacheProvider");
config.setProperty("hibernate.jdbc.fetch_size", "1000");
config.setProperty("hibernate.jdbc.batch_size", "50"); //batches network calls in one
config.setProperty("hibernate.jdbc.use_scrollable_resultset", "true");
config.setProperty("hibernate.connection.provider_class",
"org.hibernate.connection.C3P0ConnectionProvider");
config.setProperty("hibernate.c3p0.acquire_increment", "1");
config.setProperty("hibernate.c3p0.idle_test_period", "10");
config.setProperty("hibernate.c3p0.min_size", "1");
config.setProperty("hibernate.c3p0.max_size", "8");
config.setProperty("hibernate.c3p0.timeout", "10");
config.setProperty("javax.persistence.validation.mode", "none");
config
.setProperty("hibernate.temp.use_jdbc_metadata_defaults", "false");
config.setProperty("hibernate.show_sql", "false");
Обратите внимание, эти специфические параметры не могут быть идеально подходит для вашей базы данных, но вы должны быть в состоянии повысить производительность за счет тонкой настройки свойств выше. Подробное объяснение можно найти на doc site.
Для SQLite, вы должны настроить несколько дополнительных параметров:
config.setPageSize(4096);
config.setCacheSize(-256);
config.setSharedCache(true);
config.setReadUncommited(true);
//Be careful with these settings if needed for concurrency
//***************************************************
config.setLockingMode(LockingMode.NORMAL);
config.setSynchronous(SynchronousMode.NORMAL);
config.setJournalMode(JournalMode.WAL);
config.setTempStore(TempStore.MEMORY);
//***************************************************
Postgres немного проще и более изолированным в настройках самой базы данных. Однако имейте в виду, что оптимизатор запросов запускается после первого запуска запроса.
Если вниз голосования, скажите, пожалуйста, почему так я могу настроить вопрос. – Ascalonian
Насколько я знаю, Hibernate не будет называть «полный» конструктор. Он вызовет ваш конструктор no-arg и вызовет вызов поля или свойства (getter/setter) в зависимости от того, как вы его настроили. Вы проверили документацию по Hibernate? [2.2. Сущность Java-класса] (https://docs.jboss.org/hibernate/core/4.3/quickstart/en-US/html_single/#hibernate-gsg-tutorial-basic-entity) –
Я проигнорировал (чего я никогда не делал раньше, btw), потому что если вы выполните поиск по этой теме, вы найдете множество обращений, которые объясняют, как hibernate вызывает конструкторы. Я сниму нижний план (если система позволит мне), но, похоже, вы не проводили поиск, прежде чем публиковать свой вопрос. Если я ошибаюсь, я прошу прощения. Но в любом случае, hibernate вызовет конструктор default/no-args. –