【问题标题】:Entities in src/test/java are not recognized无法识别 src/test/java 中的实体
【发布时间】:2014-05-31 05:11:36
【问题描述】:

作为我测试的一部分,我正在创建一个 DAO,其唯一目的是在测试中。尝试运行单元测试时出现以下错误:

java.lang.IllegalArgumentException: Unknown entity:

似乎当实体驻留在 src/test/java 文件夹中时,它们不会被拾取。将实体移动到 src/main/java 时,一切正常。问题是这个 DAO 仅用于测试,我真的不想把它放在 main.js 中。有没有办法解决这个问题?

【问题讨论】:

  • 你是在为实体使用注解还是xml配置?
  • 注解和 jpa persistence.xml。新的 DAO 上有所有正确的注释。
  • 您的实体在persistence.xml 内吗?如果没有,你需要在那里添加
  • 所有其他实体都被自动检测到,为什么会有所不同?

标签: java hibernate maven jpa entity


【解决方案1】:

[如果您使用 JPA] 您需要为测试类提供一个单独的持久化单元(我建议在测试资源中有一个单独的 persistence.xml),并且需要在持久性中提及所有实际的 ORM 实体.xml 在class 标签中。

例如,我遵循的策略是,我创建了一个 TestUtility 并使用 CDI 注入来注入持久单元

private static final String PERSISTENCE_UNIT_NAME = "persistence-unit-test";

并构建我的 entityManager:

public static EntityManager getEntityManager() {
    if (entityManager == null) {
        final EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
        entityManager = factory.createEntityManager();
    }
    return entityManager;
}

【讨论】:

  • 您能详细说明一下吗?我不能拥有src/test/resources/META-INF/persistence.xml,因为它与src/main/resources/META-INF/ 中的那个相冲突
  • 如果您选择与src/main/resources/META-INF/ 中的实际名称不同的persistence-unit 名称,则不会
  • 它会在测试过程中自动被选中吗?假设我将其命名为src/test/resources/META-INF/persistence-test.xml
  • 我说的是persistence.xml 中的persistent-unit 标签。您需要在运行测试用例时制定策略以注入测试持久性单元。
  • 哦,在这种情况下,我有不同的持久性单元用于测试和开发,以便能够将它们定向到不同的位置。所有的注释都被自动拾取,为什么没有呢?
猜你喜欢
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 2021-07-24
  • 2016-01-07
相关资源
最近更新 更多