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

Java EntityManager.contains-在同一事务中返回false,java,transactions,entitymanager,jta,java-ee-7,Java,Transactions,Entitymanager,Jta,Java Ee 7,我正在努力理解EntityManager.contains方法是如何工作的,所以中的其他答案对我没有帮助 情况就是这样: 我在同一事务中调用persist(enity)和contains(entity) @Test @Transactional(value = TxType.REQUIRED) public void testContains() { Band band = new Band(); // populating band... // bandDao is

我正在努力理解
EntityManager.contains
方法是如何工作的,所以中的其他答案对我没有帮助

情况就是这样:

我在同一事务中调用
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));
}
bandao
包含
保存
方法实现如下

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);
    }
}
只有
保存
标记为
@Transactional
;但是,如果我没有弄错,那么应该从调用方传播事务

运行测试时,它会失败,因为它期望
为true
,但它会收到
为false

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


有人能解释我做错了什么吗?

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


请参阅:

是否已覆盖
频带
equals
hashcode
?@andreTobilko
equals
is,
hashcode
isnot@AndrewTobilko我还尝试添加了
hashCode
实现(使用
Apache
HashCodeBuilder
),但没有解决问题。是的,
hashcode
并不能解决问题,这只是一种很好的覆盖方式。看起来问题与事务管理无关,而是与
Arquillian
本身有关。如果我从
BandDao.save
方法中删除
@Transactional
注释,它将失败,因为在实体被持久化时没有定义任何事务。这意味着,毕竟,我没有在同一个事务中执行
persist
,而
包含
方法。