gpt4 book ai didi

java - hibernate 3 : optimistic locking unit test

转载 作者:太空宇宙 更新时间:2023-11-04 07:59:35 25 4
gpt4 key购买 nike

我正在尝试测试我的应用程序的乐观锁定实现。然而结果并不是我所期望的。我测试的步骤如下

  • 从数据库加载实体
  • 将版本属性设置为比数据库中存在的版本属性小 1
  • 将另一个只是字符串的属性更改为其他内容
  • 保存实体

我现在预计会出现 staleException,但是实体刚刚被保存并且版本增加到下一个。

这是我的保存代码的一小部分

   public <T extends DomainObject> T save(T objectToSave) {
Session currentSession = null;
try {
currentSession = sessionFactory.getCurrentSession();
currentSession.save(objectToSave);
return objectToSave;
} catch (Exception ex) {
logger.error("save error",ex);
}
return null;
}

我使用以下代码通过整个应用程序使用命名查询按 id 加载对象

@SuppressWarnings("unchecked")
public <T extends Object> List<T> query(Class<T> returnClass, String query, List<String> namedParams, List<? extends Object> params, Integer limit) {
Session currentSession = null;
try {
currentSession = sessionFactory.getCurrentSession();
Query namedQuery = currentSession.getNamedQuery(query);
if(limit != null){
namedQuery.setMaxResults(limit);
}
namedQuery.setCacheable(true);
if (namedParams != null && namedParams.size() > 0) {
addParams(namedQuery, namedParams, (List<Object>) params);
}
return namedQuery.list();
} catch (Exception ex) {
logger.error("query error",ex);
}
return null;
}

这是我的 sessionfactory 的配置

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="entityInterceptor" ref="auditInterceptor" />
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<value>
hibernate.dialect=${hibernate.dialect}
hibernate.show_sql=${hibernate.show_sql}
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
hibernate.cache.region.factory_class=net.sf.ehcache.hibernate.EhCacheRegionFactory
hibernate.cache.use_query_cache=true
hibernate.cache.use_second_level_cache=true
hibernate.cache.provider_configuration_file_resource_path=ehcache.xml
hibernate.generate_statistics=true
hbm2ddl.auto=${hbm2ddl.auto}
hibernate.c3p0.min_size=${hibernate.c3p0.min_size}
hibernate.c3p0.max_size=${hibernate.c3p0.max_size}
hibernate.c3p0.timeout=${hibernate.c3p0.timeout}
hibernate.c3p0.max_statements=${hibernate.c3p0.max_statements}
hibernate.c3p0.idle_test_period=${hibernate.c3p0.idle_test_period}
</value>
</property>
<property name="schemaUpdate">
<value>true</value>
</property>
<property name="annotatedClasses">
<list>
<value>com.mbalogos.mba.domain.site.Site</value>
</list>
</property>
</bean>

我在 sessionFactory 的配置上是否遗漏了什么,或者我测试它完全错误,我应该以不同的方式测试它吗?

提前致谢

最佳答案

回归版本字段是危险的,因为它是由 Hibernate 控制的(如果您使用 JPA 版本控制功能)。加载一个实体,分离它(也许使用 session.evict(obj)),改变一个属性。加载同一实体,保持连接,更改它,保存它。重新附加第一个实体并尝试保存它(我认为合并会做到这一点)。然后您应该会看到 StaleObjectStateException 异常。

关于java - hibernate 3 : optimistic locking unit test,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13045579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com