Это похоже на то, что у вас есть два отдельных сеанса для одного и того же приложения, таким образом, с двумя кешами первого уровня. Кэш первого уровня - тот, который Hibernate использует для себя, в контексте сеанса. Таким образом, если вы не закрываете/не очищаете сеанс, это будет продолжать расти, возможно, конфликтуя с другими кешами 1-го уровня (в других потоках или в других виртуальных машинах). Трудно сказать, если это так, поскольку вы не указали свою среду, но вы не можете изменить кеш первого уровня другого сеанса.
Лучшим решением, чтобы избежать этого, является использование управляемого EntityManager (с вашего сервера приложений) для работы с объектами. Именно тогда роль сервера связана с таким сценарием. Но кажется, что вы делаете это «весенний путь», поэтому вам придется делать это вручную: либо очистить сеанс после его использования, либо обновить до чтения/обновления ваших данных. Затем вам понадобится какая-то блокировка (пессимистическая/оптимистичная), чтобы не потерять информацию, которая могла быть изменена из другого потока.
http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/performance.html#performance-sessioncache Помогите? – doniyor
или это: http://stackoverflow.com/questions/474159/hibernate-second-level-cache-with-spring – doniyor
Я не использую кеш второго уровня. Кроме того, в первом комментарии говорится об методе выселения, который недоступен в EntityManager Hibernate для JPA. evict() работает для традиционного спящего режима. – Deepak