jakarta-ee - 任何类型的查询都找不到持久化实体

标签 jakarta-ee testing java-ee-7 wildfly-8 jboss-arquillian

我正在尝试使用 Arquillian 和 Wildfly 8.2 实现一个小型集成测试。
通过实体管理器进行持久化和查找是可行的,但使用任何类型的查询都找不到任何内容。

我的测试类:

@RunWith(Arquillian.class)
public class VoteServiceTest {    
  @Inject
  private EntityManager entityManager;

  @Before
  public void createEntityManager() {
    entityManager.persist(user);
    entityManager.persist(vote);
  }

  @Test
  public void justATest() {
    Assert.assertTrue(entityManager.find(User.class, 1L) != null); // Works
    Assert.assertTrue(entityManager.find(Vote.class, 4L) != null); // Works
    Assert.assertTrue(entityManager.createQuery("SELECT c FROM Vote c", Vote.class).getResultList() == 1); // Fails
  }

  @Deployment
  public static JavaArchive createDeployment() {
    return ShrinkWrap.create(JavaArchive.class).addPackages(true, "de/...")
            .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml")
        .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
  }
}

持久性.xml:

<persistence ...>
    <persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
        <class>de....Vote</class>
        <class>de....User</class>
        <properties>
            <property name="hibernate.hbm2ddl.auto" value="create"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver"/>
            <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:test"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

我错过了什么?

最佳答案

答案很简单,我忘记使用交易了。更改代码后,我的查询返回了我期望的实体。

  @PersistenceContext
  protected EntityManager em;

  @Inject
  protected UserTransaction utx;

  @Before
  public void preparePersistenceTest()
      throws Exception {

    utx.begin();
    em.joinTransaction();
    em.persist(user);
    em.persist(vote);
    utx.commit();
    // reset the persistence context (cache)
    em.clear();
  }

关于jakarta-ee - 任何类型的查询都找不到持久化实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28067482/

相关文章:

java - JSF Controller 与 Struts Controller

testing - 戈朗 : Find filenames and line numbers that prints output to stdout

java - 如何仅刷新 hazelcast 中的缓存附近

java - 在java中重写哈希码和equals方法?

java - 如何处理复合键 hibernate

轻松设计UI的Java Web框架

java - 没有 EJB 就不能做什么

linux - 从文件列表创建 .new 文件

.net - TFS 2010 中的功能测试

java - EJB 3.2/CDI 是否具有与 Spring 4 元注释等效的功能?