我们有 2 个 Java Web 应用程序都是读/写和 3 个独立的 Java 读/写应用程序(一个通过电子邮件加载问题,一个处理 xml 提要,一个向订阅者发送电子邮件)都使用休眠并共享一个公共代码库。
我们最近遇到的问题是,通过电子邮件加载的问题有时会覆盖在其中一个 Web 应用程序中创建的问题。请注意,这些是单独的问题,应该有单独的 ID。我们最初认为这是一个缓存问题。我们已经尝试关闭二级缓存,但这并没有什么不同。
<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()
.
在这个阶段,我们宁愿不设置集群的二级缓存,因为这会造成另一层复杂性,而且我们对从应用程序整体获得的性能水平非常满意。
那么在 Web 应用程序中实现开放会话模式并在独立应用程序中手动管理会话听起来会解决这个问题吗?
或者还有其他建议/想法吗?