2014-10-15 2 views
1

나는 잠시 동안 Hibernate를 아주 성공적으로 사용 해왔다. 그러나 어제 문제가 발생하여 앞으로 디버깅 시간을 많이 절약 할 수 있습니다.Hibernate loading cfg에 매핑되지 않은 엔티티

새로운 엔티티에 대한 hibernate.cfg에 최대 절전 모드 매핑을 추가하는 것을 잊었습니다.

이 엔티티를로드하려고 시도 할 때 일종의 런타임 예외가 발생할 것으로 예상되었지만 대신 아무것도로드되지 않고 모든 것이 정상적으로 처리 된 것처럼 계속 진행되었습니다.

엔티티를로드하는 데 다음 코드를 사용하고 있습니다.

protected List<T> findByCriteria(Session session, Criterion... criterion) { 
    Criteria crit = session.createCriteria(getPersistentClass()); /getPersistentClass returns a Class<T> 
    for (Criterion c : criterion) { 
     crit.add(c); 
    } 
    return crit.list(); 
} 

내 hibernate.cfg에 매핑되지 않은 엔터티를로드하려고하면 오류가 발생합니다.

이 방법이 있습니까?

+0

아마도 getPersistentClass()를 포함해야합니다. 클래스를 반환하기 때문에 포함시켜야합니다. 엔티티 클래스에서 특수 효과를 사용하고 있습니까? – raylee

+0

예, 엔티티 클래스에서 특수 효과를 사용하고 있습니다. – FuryComputers

+0

getPersistentClass는로드 될 엔티티 클래스를 반환합니다. – FuryComputers

답변

0

결국 나는 hibernate.cfg에서 매핑을 버리고 내 SessionFactory에 대한 Configuration 객체를 빌드 할 때 다음 메소드를 추가했습니다.

private static void addAnnotatedEntityClasses(Configuration configuration) { 
    Reflections reflections = new Reflections("com.mypackage"); 
    Set<Class<?>> classes = reflections.getTypesAnnotatedWith(Entity.class); 

    logger.debug("Adding Hibernate Mapping for: "); 
    for (final Class<?> clazz : classes) { 
     logger.debug(clazz.getName()); 
     configuration.addAnnotatedClass(clazz); 
    } 
} 

내 프로젝트의 모든 클래스를 Entity 주석으로 찾아 매핑을 추가합니다.

이는 간단하게 Reflections 라이브러리를 사용합니다. 여기에 있습니다 :

<dependency> 
    <groupId>org.reflections</groupId> 
    <artifactId>reflections</artifactId> 
    <version>0.9.9-RC1</version> 
</dependency> 
0

j2EE 서버에서 코드를 실행하고 있습니까? 이전 답변에 게시 된대로 엔티티 클래스에서 특수 효과를 사용하고 있습니까? 그렇다면 엔티티 주석을 제거하십시오.

+0

J2EE 서버가 아니며 일반 Java SE 응용 프로그램입니다. 엔티티 클래스에서 주석을 사용하고 있습니다. 엔티티 주석을 제거해도 내가하려는 일은 수행되지 않습니다. 내 hibernate.cfg에 이미 주석이 달린 엔티티를 추가하는 것을 잊었을 때 에러를 찾고있다. – FuryComputers

관련 문제