如何只扫描具体的JPA实体,但不是所有实体都使用spring-boot扫描相同的包?

时间:2017-06-09 17:06:55

标签: java jpa spring-boot

我有多个JPA实体在同一个包中,例如my.package.po.EntityAmy.package.po.EntityB。使用下面的代码会自动扫描EntityA和EntityB,但我只是想扫描EntityA。我怎么能这样做?

package my.package.dao;
...
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {EntityADaoJpaImpl.class})
@DataJpaTest
@EntityScan(basePackageClasses = {EntityA.class})
public class EntityADaoJpaImplTest {
    @Inject
    private TestEntityManager entityManager;
    @Inject
    private EntityADaoJpaImpl dao;
    //...
}

1 个答案:

答案 0 :(得分:1)

经过一些研究,特别关注' ignore-some-classes-while-scanning-packagestoscan'想法:

redirectingURIs

我制作了一些自定义代码封装来简化我的单元测试:

// add only required enitites from a libray
localContainerEntityManagerFactoryBean.setPersistenceUnitPostProcessors(new PersistenceUnitPostProcessor() {
  @Override
  public void postProcessPersistenceUnitInfo(MutablePersistenceUnitInfo persistenceUnit) {
    persistenceUnit.addManagedClassName("my.package.po.EntityA");
  }
});

它完全解决了我的问题。代码封装思想来自spring-boot-autoconfigure package my.package.dao; import tech.simter.test.jpa.EntityScan; import tech.simter.test.jpa.JpaTestConfiguration; ... @RunWith(SpringRunner.class) @ContextConfiguration(classes = {EntityADaoJpaImpl.class, JpaTestConfiguration.class}) @DataJpaTest @EntityScan({EntityA.class}) public class EntityADaoJpaImplTest { @Inject private TestEntityManager entityManager; @Inject private EntityADaoJpaImpl dao; //... } 类的实现。

我的源代码托管here。它在github上。

相关问题