У нас есть 2 веб-приложения java, оба из которых предназначены для чтения / записи и 3 автономных java-приложения для чтения / записи (один загружает вопросы по электронной почте, один обрабатывает xml-фид, один отправляет электронную почту подписчикам). Все они используют hibernate и имеют общую базу кода .
Проблема, с которой мы недавно столкнулись, заключается в том, что вопросы, загружаемые по электронной почте, иногда перезаписывают вопросы, созданные в одном из веб-приложений. Обратите внимание, что это отдельные вопросы, которые должны иметь отдельные идентификаторы. Мы изначально думали, что это проблема кеширования. Мы пытались отключить кэш второго уровня, но это не имеет значения.
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
<property name="hibernate.current_session_context_class">thread</property>
<property name="hibernate.cache.use_second_level_cache">false</property>
Вопрос:
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
@DocumentId
public Integer getId() {
return this.id;
}
Мы используем MySQL, кстати.
CREATE TABLE `question` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
...
PRIMARY KEY (`id`),
...
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Мы не открываем и не закрываем сеансы, а разрешаем hibernate управлять ими через Util.getSessionFactory().getCurrentSession()
.
На этом этапе мы не будем настраивать кластеризованный кэш 2-го уровня, поскольку это создает еще один уровень сложности, и мы более чем довольны уровнем производительности, который мы получаем от приложения в целом.
Значит ли реализация шаблона открытия сеанса в веб-приложениях и ручное управление сеансами в автономных приложениях звучит так, как если бы это было исправлено?
Или любые другие предложения / идеи, пожалуйста?