2016-08-23 3 views
0

스프링 부트 프로젝트를 신속하게 시작하여 H2 데이터베이스에 데이터를 삽입하고 이에 대해 쿼리를 실행하는 플랫폼을 생성함으로써 별도의 프로젝트 엔티티에서 jpa 쿼리를 테스트하려고합니다. 이러한 쿼리의 결과를 확인하십시오.Spring Boot JPA 테스트에 개별 엔티티 만 포함하기

별도의 프로젝트에 대규모 엔티티베이스가 있으므로 테스트 당 항목을 선택적으로 선택하고 싶습니다.

나는 이것을 위해 @EntityScan 주석을 사용하려했지만 클래스를 지정한다고해도 전체 패키지를 가져 오도록 설계된 것 같습니다.

이것은 해결책이 있어야한다고 생각하지만, 지금까지는 찾을 수 없었습니다.

+0

@ EntityScan 클래스는 [EntityScanner] (http://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/)에서 스캔 한 것으로 보입니다 (소스 코드를 확인하지 않은 것 같습니다). autoconfigure/domain/EntityScanner.html). 어쩌면 자기 자신을 쓰고 주사하는 방법이 있을까요? – jhyot

답변

1

사실, Spring 컨텍스트를 사용하여 테스트 클래스를 설정하면 @DirtiesContext 또는 다른 트릭을 사용하여 자체를 다시 작성하지 않는 한 해당 컨텍스트의 해당 테스트 컨텍스트에 해당 컨텍스트가 존재한다는 것이 있습니다.

@EntityScan(basePackageClasses = MyEntity.class) 

위의 코드는 MyEntity를 사용하는 봄을 말하지 않는다, 그것은 MyEntity가 존재 패키지의 개체의 검색을 시작을 알려줍니다 당신이 예를 들면 그래서 만약 또한, 이렇게 반복적으로 수행합니다.

com.example.entities.MyEntity 
com.example.entities.subpackage.MyOtherEntity 

그것은 모두 MyEntityMyOtherEntity을 선택합니다. 그러나,이처럼 EntityScan를 썼다면 :

@EntityScan(basePackageClasses = MyOtherEntity.class) 

그런 다음 MyEntity를 찾을 수 없습니다.

그 점을 염두에두고 내가 가지고있는 유일한 제안은 아마도 모든 항목을 한꺼번에로드하는 것이 실제로 당신을 호소하는 경우 많은 수의 엔티티를 여러 개의 작은 하위 패키지로 그룹화하여로드하기 쉽도록하는 것입니다.

0

따라서 최대 절전 모드 특정 코드를 사용하는 솔루션을 생각해 냈습니다. Hibernate SessionFactoryBean은 addAnnotatedClass 메소드를 가지고 있기 때문에, 설정 파일에 LocalSessionFactoryBean 빈을 생성하면 원하는 개별 클래스를 전달할 수있다. 좀 창의적이라면 테스트 클래스에 @ TestPropertySource가 있고 그 값을 세트에서 참조하도록 테스트 할 클래스를 추가 할 수 있습니다 (필자가 DependencyGrapher를 사용하여 내가 필요로하는 모든 엔티티 클래스를 알 수 있습니다) 업 코드.

당신이 최대 절전 모드를 사용하고 있다면 실제로 불행히도, 나는 할 수 없다. 필자는 EclipseLink를 사용하도록 제한되어 있습니다. EclipseLink는이 기능을 제공하지 않습니다. Spring의 PersistenceUnitPostProcessor를 사용하여 리드가 있다고 생각합니다.