2013-10-17 4 views
1

우리는 배포를 위해 준비하고있는 새로운 webapp를 가지고 있습니다. 우리는 우리의 jar를 web-inf/lib에 수동으로 덤핑하는 것에서 eclipse의 전개 어셈블리를 사용하여 공통 위치에서 web-inf/lib로 동적으로 이동 시켜서 lib 디렉토리를 하나 생성했습니다. 이 전술은 하나의 항아리 이외에 모든 것이 잘 작동합니다 ... 최대 절전 모드 엔티티가있는 장치입니다.Hibernate packageesToScan은 실패하지만 annotatedClasses가 작동합니다.

항아리가 있습니다. 클래스 패스에 있습니다. 인스턴스를 생성 할 수 있습니다. 그러나 우리가 실행할 때, 알려지지 않은 엔티티에 대한 예외는 마치 대상 엔티티의 주석이 실행되지 않은 것처럼 보입니다. "packagesToScan"선언을 "annotatedClasses"목록으로 바꾸면 잘 작동합니다. 그러나 우리의 packagesToScan은 옳았습니다. 나는 개발자가 매번 자신의 클래스를 선언하는 잊을 수없는 단계를 수행해야하는 것보다 유연한 packagesToScan을 사용하는 편이 낫다.

누구에게 이것이 어떨까요?

<bean id="rptappSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> 
    <property name="dataSource" ref="rptappDataSource" /> 
    <!-- works --> 
    <property name="annotatedClasses"> 
    <list><value>a.b.c.report.model.table.BOReportTask</value></list> 
    </property> 
    <!-- does not work --> 
    <property name="packagesToScan"> 
    <list><value>a.b.c.report.model.table</value></list> 
    </property> 
    <!-- also does not work --> 
    <property name="packagesToScan" value="a.b.*" /> 
    <property name="hibernateProperties"> 
    <props> 
     <prop key="hibernate.dialect">org.hibernate.dialect.DB2Dialect</prop> 
     <prop key="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</prop> 
     <prop key="hibernate.bytecode.provider">javassist</prop> 
     <prop key="hibernate.show_sql">${hibernate.show.sql}</prop> 
     <prop key="format_sql">false</prop> 
     <prop key="use_sql_comments">false</prop> 
     <prop key="hibernate.cache.use_second_level_cache">false</prop> 
     <prop key="hibernate.default_schema">K702PRDR</prop> 
    </props> 
    </property> 
</bean> 

예외 :

Caused by: org.hibernate.hql.ast.QuerySyntaxException: BOReportTask is not mapped [from BOReportTask r where r.reportStatus = :status order by r.submissionTimestamp asc] 
     at org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:181) 
     at org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:111) 
     at org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:93) 
     at org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:313) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3353) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:3237) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:724) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:575) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:292) 
     at org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:235) 
     at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:254) 
     at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:185) 
     at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:136) 
     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:101) 
     at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:80) 
     at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:98) 
     at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:156) 
     at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:135) 
     at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1760) 
     at a.b.c.report.dao.hibernate.table.ReportTaskDao.fetchByStatus(ReportTaskDao.java:68) 
+0

org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean을 사용하고 최신 버전 (hibernate/spring)을 사용하지 않는 이유가 있습니까? –

+0

어쩌면 도움이됩니다. (이중 게시물에 대해 유감스럽게도 이전 의견을 수정할 수있는 방법을 찾을 수 없습니다) –

+0

@aumand - Re : 최신 버전 - 최대 절전 모드입니다. 3.5.1. 업그레이드 허용 요청을했지만 아직 승인 할 권한이 없습니다. 3.5.1에서 사용하기에 더 좋은 클래스가 있다면 나는 모두 귀입니다. – user1187719

답변

2

그래서 나는 최근이 게시물을 재발견

스프링 설정합니다 (아래 현실에서 우리는 한 번에 하나의 주석, 동시에 세 가지를 모두 보여줍니다) 나는 후세를위한 해결책을 게시 할 것이라고 생각했다. RAD에서 jar 파일을 내보낼 때 jar 마법사에는 마법사의 첫 페이지에 "디렉토리 항목 추가"라는 체크 박스가 있습니다. 그것을 확인하십시오. 그것이 없으면 엔티티가있는 패키지의 루트에 있었던 (패키지가 하나 이상 있기 때문에) packages.html 참조가 발견되지 않습니다. 우승자가없는 것처럼 행동했습니다. 이를 확인하면 매니페스트에 항목이 추가되고 주석 스캐너가 클래스를 찾게됩니다.

관련 문제