- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试测试我的应用程序的乐观锁定实现。然而结果并不是我所期望的。我测试的步骤如下
我现在预计会出现 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/
我觉得问这个问题有点愚蠢,但为了把事情弄清楚,有时必须问一些愚蠢的问题:) 因此,我们可以像 Martin Kleppmann 在他的演讲中所做的那样定义写入偏差: Write skew patter
当使用乐观锁定策略时,可以解决如下并发问题: | the first transaction started ||
我正在尝试安装 angular phone cat 应用程序并使用 karma 测试运行器运行测试用例。我安装了 Node v0.10.33。我已经在全局范围内安装了 karma 。现在,我尝试使用“
首先,我知道有很多关于该主题的已发布问题:1 2 3 4 5 .建议的方法和原因: Marshal.SizeOf() 1 - 不适用于托管类型。 GC.GetTotalMemory 1 2 - 容易出
在我的 React 应用程序中,我使用数据库 ID 作为键来渲染从服务器返回的项目数组。 items.map(item => ) 这工作正常,但现在我想做乐观更新,所以我在将新项目提交到服务器之前将其
所以我正在阅读 Optimistic UI这是我想在我的 android java 应用程序中实现的东西。 我的 Android 应用程序与我的其余 api 连接。我的困惑是我该怎么做? 我有一个产品
在思考 BitTorrent 的工作原理时,我想到了几个问题。如果有人可以分享一些可能的回应,将不胜感激。 假设一个 BitTorrent 从跟踪器获得 50 个对等点,然后与其中的 20 个建立连接
我正在调试使用 JPA/Hibernate 和 Postgres (9.6.2) 的 Java 应用程序的奇怪行为。 应用程序有 3 个实体:User、Country、UserEvent。 Hiber
我正在尝试使用 yargs 为 Node 模块编写 CLI但是我很难设置两个可以使用的不同命令,一个只需要一个参数,而另一个需要两个。这是我目前所拥有的 var argv = require('yar
我正在阅读 intro to redux pattern , 那里有以下段落: ... consider the new requirements becoming common in front-e
我正在使用具有 Render Prop API 并尝试在 UI 中执行乐观响应的组件。 到目前为止,我在 _onSubmit 中有这个 block 功能- createApp({ variab
尝试修复 Carto tool from Mapbox 的离线安装在 Ubuntu 14.04 上。目前, Node 给我一个错误,它找不到 optimist 模块。我可以手动找到一个 optimis
正在关注 the Apollo docs on Mutation components ,我有一个有效的 Mutation 组件,看起来像 Apollo 文档中提供的这个示例: { cons
我正在寻找一种让乐观的用户界面从列表中删除项目的方法。 列表的查询是: myQuery{ Foo:{ Bar:{ id } } 删除突变: mutation deleteBar(inp
我正在尝试测试我的应用程序的乐观锁定实现。然而结果并不是我所期望的。我测试的步骤如下 从数据库加载实体 将版本属性设置为比数据库中存在的版本属性小 1 将另一个只是字符串的属性更改为其他内容 保存实体
我是 optimist 的新手我做了一些谷歌搜索和尝试,但我仍然找不到添加 --help 选项的优雅方法。 我看到一个 help()文档上的选项。有了这个,我希望以下工作: var argv = re
使用 React.js 真的很愉快。 我根据官方教程搭建了一个简单的评论应用。 您可以添加、编辑和删除评论。它们每 10 秒通过 GET 拉取一次。 本教程有一次提到乐观更新:在创建、更新或删除操作的
我们使用 SendGrid API 将敏感电子邮件发送到 Office365 托管的电子邮件地址。默认情况下,这两种服务都使用机会性 TLS,这反过来会让您相信电子邮件始终会使用 TLS 进行加密。
有一个实体 Foo 带有 @Version 列。如果我想删除它,我希望 Spring Data JPA 和/或 Hibernate 检查 @Version 列的当前值是否与数据库中的值匹配。如果不是,
static boolean unsynchronizedSetter(Date expected){ Date newDate = new Date(); AtomicReferen
我是一名优秀的程序员,十分优秀!