本文介绍了ClassNotFoundException:即使在添加classic.ClassicQueryTranslatorFactory之后,org.hibernate.hql.internal.ast.HqlToken的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


$ org.hibernate.HibernateException:无法实例化QueryTranslatorFactory:org.hibernate.hql.classic.ClassicQueryTransactionFactory b

$ b

我使用Hibernate 4,Spring 3和JSF 2.0。在运行jsf页面时,我得到

  org.hibernate.QueryException:ClassNotFoundException:
org.hibernate.hql.internal .ast.HqlToken [从$ b $中选择generatedAlias0 net.test.model.Request as generatedAlias0]

我已经在applicationContext.xml中的hibernate属性下有以下内容:

 < prop key =hibernate.query.factory_class> ; org.hibernate.hql.internal.classic。 
ClassicQueryTranslatorFactory
< / prop>

请注意,我添加了 org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter ,我怀疑添加这个后,我又得到了 org .hibernate.QueryException:ClassNotFoundException



我的问题对于 ClassicQueryTranslatorFactory 春天属性?
如果没有这样的属性我怎么解决这个问题?



applicationContext.xml

 < beans xmlns =http://www.springframework.org/schema/beans
xmlns:xsi =http://www.w3.org/2001/XMLSchema-instance xmlns:tx =http://www.springframework.org/schema/tx
xmlns:context =http://www.springframework.org/schema/context
xsi:schemaLocation =http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http:// www。 springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd\">

< bean class =org.springframework.beans.factory.config.CustomScopeConfigurer>
< property name =scopes>
< map>
< entry key =view>
< bean class =org.primefaces.spring.scope.ViewScope/>
< / entry>
< / map>
< / property>
< / bean>
< context:component-scan base-package =net.test/>
< bean id =DataSourceclass =com.mchange.v2.c3p0.ComboPooledDataSource
destroy-method =close>
< property name =driverClassvalue =oracle.jdbc/>
value =jdbc:oracle:thin:@server:1521:orcl/>
< property name =uservalue =scott/>
< property name =passwordvalue =tiger/>
< property name =maxPoolSizevalue =10/>
< property name =maxStatementsvalue =0/>
< property name =minPoolSizevalue =5/>
< / bean>
< bean class =org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor/>
<! - JPA实体管理器工厂 - >
< bean id =entityManagerFactory
class =org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean>
< property name =dataSourceref =DataSource/>
< property name =packagesToScanvalue =net.test.model/>

< property name =jpaVendorAdapter>
< bean class =org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter>
< property name =showSqlvalue =false/>
< property name =generateDdlvalue =false/>
< property name =databasePlatformvalue =$ {jdbc.dialectClass}/>
< / bean>
< / property>
< / bean>
< bean id =defaultLobHandlerclass =org.springframework.jdbc.support.lob.DefaultLobHandler/>
< bean id =SessionFactory
class =org.springframework.orm.hibernate4.LocalSessionFactoryBean>
< property name =dataSourceref =DataSource/>
< property name =annotatedClasses>
< list>
< value> net.test.model.Request< / value>
< / list>
< / property>
< property name =hibernateProperties>
<道具>
< prop key =hibernate.dialect> org.hibernate.dialect.Oracle10gDialect< / prop>
< prop key =hibernate.show_sql> true< / prop>
< prop key =hibernate.query.factory_class> org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory
< / prop>
< /道具>
< / property>
< / bean>
<! - 事务管理器被定义为
< bean id =txManager
class =org.springframework.orm.hibernate4.HibernateTransactionManager>
< property name =sessionFactoryref =SessionFactory/>
< / bean> - >

<! - 交易设定 - >
< bean id =transactionManager
class =org.springframework.orm.jpa.JpaTransactionManager>
< property name =entityManagerFactoryref =entityManagerFactory/>
< / bean>

< bean id =txManager
class =org.springframework.orm.hibernate4.HibernateTransactionManager>
< property name =sessionFactoryref =SessionFactory/>
< / bean>

< tx:注解驱动的事务管理器=transactionManager/>
< tx:annotation-driven transaction-manager =txManager/>

< context:annotation-config />


< bean id =hibernateStatisticsMBeanclass =org.hibernate.jmx.StatisticsService>
< property name =statisticsEnabledvalue =true/>
< property name =sessionFactoryvalue =#{entityManagerFactory.sessionFactory}/>
< / bean>
< bean name =ehCacheManagerMBean
class =org.springframework.cache.ehcache.EhCacheManagerFactoryBean/>

< bean id =mbeanServerclass =org.springframework.jmx.support.MBeanServerFactoryBean>
< property name =locateExistingServerIfPossiblevalue =true/>
< / bean>

< bean id =jmxExporterclass =org.springframework.jmx.export.MBeanExporterlazy-init =false>
< property name =serverref =mbeanServer/>
< property name =registrationBehaviorNamevalue =REGISTRATION_REPLACE_EXISTING/>
< property name =beans>
< map>
< entry key =SpringBeans:name = hibernateStatisticsMBeanvalue-ref =hibernateStatisticsMBean/>
< entry key =SpringBeans:name = ehCacheManagerMBeanvalue-ref =ehCacheManagerMBean/>
< / map>
< / property>
< / bean>

< / beans>


解决方案

通过执行以下操作, p>

使用与$ Hibernate兼容的 antlr 2.7.6 版本,在 setDomainEnv中添加一个引用。 cmd

  set CLASSPATH = \maven\repo\antlr\antlr\2.7 .6 \ antlr-2.7.6.jar;%CLASSPATH%

更多信息



谢谢


I am using Hibernate 4, Spring 3 and JSF 2.0. While running jsf page I am getting

org.hibernate.QueryException: ClassNotFoundException: 
org.hibernate.hql.internal.ast.HqlToken [select generatedAlias0 from 
net.test.model.Request as generatedAlias0]

I already have the following under hibernate properties in applicationContext.xml

<prop key="hibernate.query.factory_class">org.hibernate.hql.internal.classic.
ClassicQueryTranslatorFactory
                </prop>

Please note that I have added org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean and org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter, I suspect that after adding this I was again getting org.hibernate.QueryException: ClassNotFoundException

My question what is the equivalent of ClassicQueryTranslatorFactory for spring properties?If no such properties how could I resolve this?

applicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    <!-- Spring view scope customized -->

    <bean class="org.springframework.beans.factory.config.CustomScopeConfigurer">
        <property name="scopes">
            <map>
                <entry key="view">
                    <bean class="org.primefaces.spring.scope.ViewScope" />
                </entry>
            </map>
        </property>
    </bean>
    <context:component-scan base-package="net.test" />
    <!-- Data Source Declaration -->
    <bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
        destroy-method="close">
        <property name="driverClass" value="oracle.jdbc" />
        <property name="jdbcUrl"
            value="jdbc:oracle:thin:@server:1521:orcl" />
        <property name="user" value="scott" />
        <property name="password" value="tiger" />
        <property name="maxPoolSize" value="10" />
        <property name="maxStatements" value="0" />
        <property name="minPoolSize" value="5" />
    </bean>
      <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>
    <!-- JPA Entity Manager Factory -->
    <bean id="entityManagerFactory" 
          class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
         <property name="dataSource" ref="DataSource" />
         <property name="packagesToScan" value="net.test.model" />

         <property name="jpaVendorAdapter">      
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">  
      <property name="showSql" value="false" />
         <property name="generateDdl" value="false" />
         <property name="databasePlatform" value="${jdbc.dialectClass}" />            
       </bean>
   </property>         
      </bean> 
      <bean id="defaultLobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" />        
    <!-- Session Factory Declaration -->
    <bean id="SessionFactory"
        class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="DataSource" />
        <property name="annotatedClasses">
            <list>
                <value>net.test.model.Request</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.query.factory_class">org.hibernate.hql.internal.classic.ClassicQueryTranslatorFactory
                </prop>
            </props>
        </property>
    </bean>
    <!-- Enable the configuration of transactional behavior based on annotations 
    <tx:annotation-driven transaction-manager="txManager" />-->
    <!-- Transaction Manager is defined 
    <bean id="txManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="SessionFactory" />
    </bean>-->

     <!-- Transaction Config -->
    <bean id="transactionManager"
          class="org.springframework.orm.jpa.JpaTransactionManager">
          <property name="entityManagerFactory" ref="entityManagerFactory" />
          </bean>   

          <bean id="txManager"
        class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="SessionFactory" />
    </bean>         

    <tx:annotation-driven transaction-manager="transactionManager"/>  
    <tx:annotation-driven transaction-manager="txManager"/>             

     <context:annotation-config/>


    <bean id="hibernateStatisticsMBean" class="org.hibernate.jmx.StatisticsService">
        <property name="statisticsEnabled" value="true" />
        <property name="sessionFactory" value="#{entityManagerFactory.sessionFactory}" />
    </bean>
    <bean name="ehCacheManagerMBean"
        class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean" />

    <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean">
        <property name="locateExistingServerIfPossible" value="true" />
    </bean>

    <bean id="jmxExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false">
        <property name="server" ref="mbeanServer" />
        <property name="registrationBehaviorName" value="REGISTRATION_REPLACE_EXISTING"/>
        <property name="beans">
            <map>               
                <entry key="SpringBeans:name=hibernateStatisticsMBean" value-ref="hibernateStatisticsMBean" />
                <entry key="SpringBeans:name=ehCacheManagerMBean" value-ref="ehCacheManagerMBean" />
            </map>
        </property>
    </bean>

</beans>
解决方案

This issue has been resolved by doing the following

Use antlr 2.7.6 version which is compatible with Hibernate, add a reference in setDomainEnv.cmd

set CLASSPATH=\maven\repo\antlr\antlr\2.7.6\antlr-2.7.6.jar;%CLASSPATH%

More information here

Thanks

这篇关于ClassNotFoundException:即使在添加classic.ClassicQueryTranslatorFactory之后,org.hibernate.hql.internal.ast.HqlToken的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-14 20:27