클래스에 유효한 JPA 정의가 있는지 프로그래밍적으로 확인하는 가장 쉬운 방법

StackOverflow https://stackoverflow.com/questions/2262819

문제

나는 주석이 달린 많은 수업과 함께 일하고 있습니다 javax.persistence.Entity 그리고 같은. 내 프로젝트는 자체적으로 끈기가 아닌 JPA 공개 클래스에 대한 메타 데이터를 생성하는 것입니다. 따라서 테스트 케이스로 사용하고 있습니다.

최대 절전 모드 나 다른 JPA 제공 업체를 발사하는 대신 내 JPA 선언이 실제로 유효한지 프로그래밍 방식으로 확인하고 싶습니다.

가장 쉬운 방법은 무엇입니까?

도움이 되었습니까?

해결책

가능한 가장 간단한 것을 만듭니다 SessionFactory 또는 eclipselink 또는 OpenJPA가 무엇이든 제공합니다 EntityManagerFactory 그리고 그들이 그것을 검증하도록하십시오 (필요한 경우 더미 인 메모리 데이터베이스 사용). 재발 명하기에는 너무 복잡합니다.

최대 절전 모드를 사용하여 사용 할 수 있습니다 Configuration.buildMappings:

@RunWith(Theories.class)
public class EntitiesAreValidTest {

    @DataPoints
    public static Class<?>[] entities = new Class[] {
        SimpleEntity.class,
        SimpleEntityWithTransientField.class,
        TwoFieldEntity.class
    };

    @Theory
    public void classHasValidConfiguration(Class<?> entityClass) {

        new AnnotationConfiguration().addAnnotatedClass(entityClass).buildMappings();
    }
}

다른 팁

테스트에서 콘크리트 JPA 제공자를 사용하는 것이 잘못된 것은 무엇입니까? 임베디드 데이터베이스 (예 : Apache Derby)와 함께 이미 구현 된 논리를 재사용 할 수 있습니다. 또 다른 아이디어는 Eclipselink, Hibernate, OpenJPA의 소스를 확인하여 직접 사용할 수 있는지 확인하는 것입니다.

더 쉬운 방법이 있는지 확실하지 않지만 반사를 사용하여 클래스의 주석에 액세스 할 수 있습니다.

Class class = Example.class;
Annotation[] annotations = class.getAnnotations();

JPA 제공 업체를 신뢰하지 않으면 (또는 사용하고 싶지 않은 경우) JDBC 메타 데이터를 사용하여 검색된 JPA 주석 (메타 데이터)을 조정하십시오. resultSetmetadata (예를 들어 참조하십시오 여기).

나는 이것이 단순하다는 것을 의미하지는 않지만 올바른 접근 방식을 사용하면 각 엔티티의 기본 정의를 확인할 수있는 콤팩트 한 도우미 방법이 있어야합니다. 또한 마일리지는 다루려는 JPA 기능의 양에 따라 다를 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top