우리는 배포를 위해 준비하고있는 새로운 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)
org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean을 사용하고 최신 버전 (hibernate/spring)을 사용하지 않는 이유가 있습니까? –
어쩌면 도움이됩니다. (이중 게시물에 대해 유감스럽게도 이전 의견을 수정할 수있는 방법을 찾을 수 없습니다) –
@aumand - Re : 최신 버전 - 최대 절전 모드입니다. 3.5.1. 업그레이드 허용 요청을했지만 아직 승인 할 권한이 없습니다. 3.5.1에서 사용하기에 더 좋은 클래스가 있다면 나는 모두 귀입니다. – user1187719