小编esa*_*saj的帖子

如何在集成测试中使用Propagation.REQUIRES_NEW回滚嵌套事务

我对扩展以下基类的各种服务进行了多次集成测试:

@ContextConfiguration(locations="classpath:applicationContext-test.xml")
@TransactionConfiguration(transactionManager="txManager", defaultRollback=true)
@Transactional
public abstract class IntegrationTestBase extends AbstractTransactionalJUnit4SpringContextTests
{
    //Some setup, filling test data to a HSQLDB-database etc
}
Run Code Online (Sandbox Code Playgroud)

对于大多数情况,这工作正常,但我有一个服务类,其中定义了事务propagation=Propagation.REQUIRES_NEW.似乎这些事务没有回滚(因为它们是嵌套事务并且显然在"外部"事务中提交?).回滚"外部"(测试用例级别)事务,至少根据测试日志.提交的事务会使一些后续测试陷入混乱,因为它们已经更改了测试数据.

我可以通过强制测试在测试之间重新创建和重新填充数据库来解决这个问题,但我的问题是,这是预期的行为还是我在测试中做错了什么?是否可以强制嵌套事务从测试代码回滚?

spring integration-testing hibernate transactions rollback

20
推荐指数
2
解决办法
7935
查看次数

关于乐观锁定的基本问题(Hibernate)

我是新手使用"乐观锁定"机制 - 我使用的是hibernate(在Jboss中)和容器管理事务(CMT).我想在我的实体读取实体更新之间处理这种情况,其他人在DB中更新同一个实体(即行).在这种情况下,我想抛出异常..

我用@Version注释了我的实体 - 就像

@Version
private Long version;
Run Code Online (Sandbox Code Playgroud)

现在,我很困惑,如果这对于版本管理来说已经足够了,或者我需要显式调用EntityManager.lock()api之类的

  {
    .
    .
    final QueryDTO queryDTO = entityManager.find(QueryDTO.class, id);
    entityManager.lock(queryDTO, LockModeType.READ);
    queryDTO.setStatus(updatedStatus);
    entityManager.persist(queryDTO);
  }
Run Code Online (Sandbox Code Playgroud)

提前致谢,

hibernate jpa optimistic-locking

2
推荐指数
1
解决办法
1195
查看次数

在java字符串中的两个字符之间添加点

我有一个字符串:

String x = "10";
Run Code Online (Sandbox Code Playgroud)

现在我想.在数字之间添加并打印出来

1.0
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

java string replace

-2
推荐指数
1
解决办法
9856
查看次数