首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PersistenceContext中.persist()之后找不到实体

在PersistenceContext中.persist()之后找不到实体
EN

Stack Overflow用户
提问于 2011-08-19 09:01:33
回答 1查看 624关注 0票数 0

我正在编写一个JavaEE项目,并试图在途中得到一些单元测试。我们使用的单元测试框架是JUnit,以及用于构建和CI的Maven和Hudson。

在其他测试中,我想测试JPA-2.0查询逻辑,因为这是我们项目的核心功能之一。我们实现了相当复杂的查询逻辑,这也允许用户犯错误,拼写错误等等,所以我们想让shure相信这是可行的。

查询本身是使用JPA-2.0条件API和Metamodel动态构造的。

现在,在我的单元测试中,我设置了持久性并创建了如下所示的EntityManager:

代码语言:javascript
复制
protected static EntityManagerFactory emf;
protected static EntityManager em;
emf = Persistence.createEntityManagerFactory("persistenceUnitName");
em = emf.createEntityManager();

这是可行的,我也可以查询DB --但这不是我想要的。

我想做的是:

由于我们不想测试DB中的数据,所以计划首先创建一些实体,然后持久化它们。然后运行查询并确保得到正确的结果。最后,由于单元测试持久性没有在事务中运行,因此实体从未持久化到DB,并且DB保持不变(这正是我们想要的)。

代码语言:javascript
复制
Entity entity = new Entity();
entity.setAttribute("stuff");
//...
em.persist(entity);
// ...
// Here comes the query which should find above entity with attribute 'stuff'...

但。无论我在单元测试中创建和坚持什么实体,都不能从同一测试(甚至方法)中找到。我可以成功地查询DB并从中查找实体,但是新持久化的测试用例并不存在。

我想我误解了JPA的一些关键内容--持久性上下文--如果有人能启发我,我会很高兴的!:)

如果这一点很重要,下面是测试使用的persistence.xml的样子:

代码语言:javascript
复制
<persistence-unit name="persistenceUnitName" transaction-type="RESOURCE_LOCAL">
  <provider>org.hibernate.ejb.HibernatePersistence</provider>
  <!-- list of classes to manage -->
  <properties>
    <!-- driver and connection info, this works-->
  </properties>
</persistence-unit>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-19 11:01:52

您可以让EntityManager.getTransaction().begin()启动transactiona,然后让rollback()回滚。或者,您可以创建一个单独复制的整个数据库的实例,只是为了测试?只是个主意。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7119271

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档