Почему менеджер сущностей не равен NULL в родительском тесте начальной загрузки, но он равен NULL в репозитории? - PullRequest
0 голосов
/ 24 января 2019

У меня есть менеджер сущностей в родительском тестовом классе

@RunWith(SpringRunner.class)
@SpringBootTest(
    properties = {
            "spring.profiles.active=test",
            "spring.config.name=app-test"})
public abstract class ViewerTestBase extends DbBuilderImpl {

@Autowired EntityManager em;

Менеджер сущностей здесь в порядке. DbBuilder устанавливает тестовые данные. В @repository это нуль

@Repository public class PaymentTransactionDao {
@Autowired EntityManager em;

Причинение сбоя контрольного примера.

Менеджер сущностей сопоставляется с базой данных h2 для тестов.

Класс конфигурации персистентности - плита котла

@Configration
@EnableTransactionManagement
public class PersistenceConfig {

  @Bean
  public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) {
    LocalContainerEntityManagerFactoryBean em = builder.dataSource(viewerDataSource())
            .packages("viewer.model")
            .persistenceUnit("viewer")
            .build();
    return em;
  }

  @Bean
  public PlatformTransactionManager transactionManager(
        EntityManagerFactory viewerEntityManagerFactory) {
    return new JpaTransactionManager(pspEntityManagerFactory);
  }

  @Bean
  @Primary
  @ConfigurationProperties(prefix = "viewer.dbo.datasource")
  public DataSource viewerDataSource() {
    return DataSourceBuilder.create().build();
  }

  @Bean
  @ConfigurationProperties(prefix = "viewer.auth.datasource")
  public DataSource authDataSource() {
    return DataSourceBuilder.create().build();
  }

Настройка с помощью пружинного стартера jpa

compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
compile("org.springframework.boot:spring-boot-devtools")
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'

testCompile group: 'junit', name: 'junit', version: '4.12'
testCompile group: 'com.h2database', name: 'h2'
testCompile('org.springframework.boot:spring-boot-starter-test')
testCompile group: 'org.springframework.boot', name: 'spring-boot-test'
testCompile group: 'org.springframework.boot', name: 'spring-boot-test-autoconfigure'

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Решено с помощью внедрения конструктора.

Изменить конструктор @Repository

public class ViewItemDao {
  @PersistenceContext
  protected EntityManager em;
  public ViewItemDao(EntityManager em) {
    this.em = em;
  }

Изменить тест.Обратите внимание, что менеджер сущностей вводился в тестовые классы только с помощью @RunWith (SpringRunner.class) и @SpringBootTest

@Test
public void testQueryId() throws InvalidSearchParameterException, SearchFailureException {
    generateTransaction("639051cc-4b19-4383-9c9a-89a80cd2a2f9");

    ViewItemDao viewItemDao = new ViewItemDao(em);

Я изменил @Autowired на @PersistenceContext, не заметив разницы.

0 голосов
/ 24 января 2019

Чтобы поместить EntityManager в контекст постоянства, измените:

@Autowired  
private EntityManager entityManager;

К

@PersistenceContext
private EntityManager entityManager;

Постоянный контекст - это набор экземпляров объекта, в котором для любого постоянного идентификатора объекта существует уникальный экземпляр объекта. В контексте постоянства экземпляры сущности и их жизненный цикл управляются конкретным менеджером сущности. Объем этого контекста может быть либо транзакцией, либо расширенной единицей работы.

Официальная документация определения гибернации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...