现在初学SSH ,打的环境是struts2,spring3和hibernate4,想使用hibernate的annontation,按照网上的方法在beans.xml中做如下配置:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">  
   <property name="dataSource"><ref bean="dataSource" /></property>  
   <property name="annotatedClasses">  
  <list>                
    <value>com.user.model.User</value>  
    <value>com.user.model.Dept</value>  
  </list>  
</property>  
但出现Caused by: java.lang.NoClassDefFoundError: Lorg/hibernate/cache/CacheProvider;这个错误,一查说是hibernate4中已经不用CacheProvider,使用<bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">配置了,那我像知道这样配置后如何使用hibernate annontation???HibernateSpringSSH

解决方案 »

  1.   

    <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
      

  2.   

    在dao的接口中配置这个
    @Autowired
    public void setSessionFactory0(SessionFactory sessionFactory) {
    super.setSessionFactory(sessionFactory);
    }
      

  3.   

    试过了吗?一样用,4的LocalSessionFactoryBean是支持annotation的
      

  4.   


    现在报could not prepare statement这个错了。。
      

  5.   


    现在报could not prepare statement这个错了。。
    是不是sessionFactory的相关参数没有配置好,建议给出完整的异常
      

  6.   


    这个还不不太理解, super.setSessionFactory(sessionFactory); 找谁的setSessionFactory方法?;
      

  7.   


    现在报could not prepare statement这个错了。。
    是不是sessionFactory的相关参数没有配置好,建议给出完整的异常六月 25, 2013 10:14:24 下午 org.springframework.orm.hibernate4.HibernateTransactionManager afterPropertiesSet
    INFO: Using DataSource [org.apache.commons.dbcp.BasicDataSource@2304b8] of Hibernate SessionFactory for HibernateTransactionManager
    六月 25, 2013 10:14:24 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    WARN: SQL Error: -204, SQLState: 42704
    六月 25, 2013 10:14:24 下午 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions
    ERROR: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=administrator.PERSON, DRIVER=3.62.56
    Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not prepare statement
    at org.hibernate.exception.internal.SQLStateConversionDelegate.convert(SQLStateConversionDelegate.java:123)
    at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:49)
    at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:188)
    at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareStatement(StatementPreparerImpl.java:117)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.prepare(IdentityGenerator.java:89)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:55)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2975)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3487)
    at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:81)
    at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:377)
    at org.hibernate.engine.spi.ActionQueue.addResolvedEntityInsertAction(ActionQueue.java:214)
    at org.hibernate.engine.spi.ActionQueue.addInsertAction(ActionQueue.java:194)
    at org.hibernate.engine.spi.ActionQueue.addAction(ActionQueue.java:178)
    at org.hibernate.event.internal.AbstractSaveEventListener.addInsertAction(AbstractSaveEventListener.java:321)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:286)
    at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:192)
    at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:125)
    at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
    at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
    at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:853)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:827)
    at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:831)
    at cn.lactec.app.dao.impl.LoanDaoBean.save(LoanDaoBean.java:76)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:96)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:260)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:94)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy13.save(Unknown Source)
    at cn.lactec.app.logic.impl.LoanLogicBean.save(LoanLogicBean.java:64)
    at cn.lactec.app.service.LoanService.save(LoanService.java:27)
    at cn.lactec.app.test.Test.main(Test.java:26)
    Caused by: com.ibm.db2.jcc.am.SqlSyntaxErrorException: DB2 SQL Error: SQLCODE=-204, SQLSTATE=42704, SQLERRMC=administrator.PERSON, DRIVER=3.62.56
      

  8.   


    现在报could not prepare statement这个错了。。
    是不是sessionFactory的相关参数没有配置好,建议给出完整的异常这个换成XML方式就可以运行,但是用annontation就报错。。
      

  9.   


    这个错误是传入数据库sql的语法错误,估计annotation与正确的xml配置没有完全等价引起的
      

  10.   

    看这个的说明org.springframework.orm.hibernate4
    Class LocalSessionFactoryBeanpublic class LocalSessionFactoryBean
    extends HibernateExceptionTranslator
    implements FactoryBean<SessionFactory>, ResourceLoaderAware, InitializingBean, DisposableBeanFactoryBean that creates a Hibernate SessionFactory. This is the usual way to set up a shared Hibernate SessionFactory in a Spring application context; the SessionFactory can then be passed to Hibernate-based data access objects via dependency injection.NOTE: This variant of LocalSessionFactoryBean requires Hibernate 4.0 or higher. It is similar in role to the same-named class in the orm.hibernate3 package. However, in practice, it is closer to AnnotationSessionFactoryBean since its core purpose is to bootstrap a SessionFactory from annotation scanning.NOTE: To set up Hibernate 4 for Spring-driven JTA transactions, make sure to either specify the "jtaTransactionManager" bean property or to set the "hibernate.transaction.factory_class" property to CMTTransactionFactory. Otherwise, Hibernate's smart flushing mechanism won't work properly. 所以它是支持annotation的
      

  11.   


    这个错误是传入数据库sql的语法错误,估计annotation与正确的xml配置没有完全等价引起的有annotation不是不需要**.hbm.xml了么?
      

  12.   


    这个错误是传入数据库sql的语法错误,估计annotation与正确的xml配置没有完全等价引起的有annotation不是不需要**.hbm.xml了么?
    是不需要,xml配置方式传达给hibernate的必要信息,annotation方式也必须同样并正确地给到才不会出错,估计是annotation漏了点什么或写错了点什么