【发布时间】:2015-05-12 15:03:56
【问题描述】:
我在休眠 4 中使用 JTA 事务管理器。有没有人知道这个问题。在执行刷新时,我遇到了错误。
下面是我面临上述问题的一段代码。
public void saveOrUpdateEvent(Event event)
{
event = DomainReferenceMapper.map(event);
Session session = getSessionFactory().getCurrentSession();
session.saveOrUpdate(event);
session.flush();
XML:
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
<prop key="hibernate.show_sql">false</prop>
<!-- prop key="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</prop-->
<!-- Package was changed in the updgration of hibernate -->
<prop key="hibernate.query.factory_class">org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.TreeCacheProvider</prop>
<!-- prop key="hibernate.cache.use_query_cache">true</prop -->
<!--
Added for hibernate upgradation
-->
<prop key="hibernate.cache.use_second_level_cache">false</prop>
<!--<prop key="hibernate.enable_lazy_load_no_trans">true</prop>
--><prop key="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</prop>
<prop key="hibernate.transaction.jta.platform">org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform</prop>
</props>
</property>
【问题讨论】:
-
从错误来看,您的
event对象似乎来自另一个会话,与Session session = getSessionFactory().getCurrentSession();返回的对象不同。 -
@acdcjunior 调用的方法在不同的类中,所以这意味着新事务将可用,对吗?如果不能,请告诉我如何解决
-
为什么禁用二级缓存?另外,如果您确定数据库中不存在该对象,则使用保存,如果存在,则使用 session.merge(objectname);请分开方法。
-
我没有禁用二级缓存。我尝试了合并,但是当我执行其他操作时,我没有得到任何响应
-
DomainReferenceMapper 方法是做什么的?