gpt4 book ai didi

java - EntityManager.contains - 在同一事务中返回 false

转载 作者:行者123 更新时间:2023-11-30 10:47:07 26 4
gpt4 key购买 nike

我很难理解 EntityManager.contains 方法是如何工作的,SO 中的其他答案对我没有帮助。

情况是这样的:

我在同一个事务中调用了 persist(enity)contains(entity)

@Test
@Transactional(value = TxType.REQUIRED)
public void testContains() {
Band band = new Band();
// populating band...

// bandDao is an `@Inject`ed in the class
bandDao.save(band);
assertThat(bandDao.contains(band), is(true));
}

BandDaocontainssave方法实现如下

public class BandDao {

@PersistenceContext
EntityManager em;

...

@Transactional(value = TxType.REQUIRED)
public void save(Band band) {
em.persist(band);
}

public boolean contains(Band band) {
return em.contains(band);
}
}

只有save被标记为@Transactional;但是,如果我没有弄错的话,事务应该从调用者传播。

运行测试,它失败了,因为它期望一个 true,但它收到一个 false

我在 Wildfly 10 远程容器中使用 Arquillian 运行这些测试。套件中的所有其他测试(持久化、更新、检索实体)都成功了,唯一失败的是关于 contains 方法的测试。

谁能解释我做错了什么?

最佳答案

最后,问题与事务管理无关,而是 Arquillian 本身没有管理测试类上的 @Transactional 注释。

参见:Testing jpa entity classes - error Transaction is required

关于java - EntityManager.contains - 在同一事务中返回 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246922/

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