Я не уверен, что это твик, но выборка из соединения может быть полезна, если у вас есть много к одному, которое, как вы знаете, вам понадобится. Например, если Person может быть членом одного Департамента, и вы знаете, что вам понадобятся оба в одном конкретном месте, вы можете использовать что-то вроде из Person p left join fetch p.department, и Hibernate вместо этого сделает один запрос одного запроса для лица, за которым следуют n запросов для отдела.
При выполнении большого количества вставок / обновлений периодически вызывайте сброс, а не после каждого сохранения или в конце - Hibernate будет пакетировать эти операторы и отправлять их в базу данных вместе, что уменьшит нагрузку на сеть.
Наконец, будьте осторожны с кэшем второго уровня. Если вы знаете, что большинство объектов, которые вы читаете по идентификатору, будут в кеше, это может сделать вещи действительно быстрыми, но если вы рассчитываете на то, что они есть, но не настроили их должным образом, вы в конечном итоге сделаете много однорядные запросы к базе данных, когда вы могли бы вернуть большой набор результатов только с одним отключением сети / базы данных.