当前位置:编程学习 > JAVA >>

在spring中使用hibernate的annontation

  现在初学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??? Hibernate Spring SSH --------------------编程问答-------------------- <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"> --------------------编程问答-------------------- 在dao的接口中配置这个
@Autowired
public void setSessionFactory0(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
} --------------------编程问答-------------------- 试过了吗?一样用,4的LocalSessionFactoryBean是支持annotation的 --------------------编程问答--------------------
引用 3 楼 dracularking 的回复:
试过了吗?一样用,4的LocalSessionFactoryBean是支持annotation的


现在报could not prepare statement这个错了。。 --------------------编程问答--------------------
引用 4 楼 shangtongguiji 的回复:
Quote: 引用 3 楼 dracularking 的回复:

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


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

是不是sessionFactory的相关参数没有配置好,建议给出完整的异常 --------------------编程问答--------------------
引用 2 楼 u010165105 的回复:
在dao的接口中配置这个
@Autowired
public void setSessionFactory0(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
}


这个还不不太理解, super.setSessionFactory(sessionFactory); 找谁的setSessionFactory方法?; --------------------编程问答--------------------
引用 5 楼 dracularking 的回复:
Quote: 引用 4 楼 shangtongguiji 的回复:

Quote: 引用 3 楼 dracularking 的回复:

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


现在报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 --------------------编程问答--------------------
引用 5 楼 dracularking 的回复:
Quote: 引用 4 楼 shangtongguiji 的回复:

Quote: 引用 3 楼 dracularking 的回复:

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


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

是不是sessionFactory的相关参数没有配置好,建议给出完整的异常


这个换成XML方式就可以运行,但是用annontation就报错。。 --------------------编程问答--------------------
引用 8 楼 shangtongguiji 的回复:
这个换成XML方式就可以运行,但是用annontation就报错。。


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

org.springframework.orm.hibernate4
Class LocalSessionFactoryBean



public class LocalSessionFactoryBean
extends HibernateExceptionTranslator
implements FactoryBean<SessionFactory>, ResourceLoaderAware, InitializingBean, DisposableBean

FactoryBean 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的 --------------------编程问答--------------------
引用 9 楼 dracularking 的回复:
Quote: 引用 8 楼 shangtongguiji 的回复:

这个换成XML方式就可以运行,但是用annontation就报错。。


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


有annotation不是不需要**.hbm.xml了么? --------------------编程问答--------------------
引用 11 楼 shangtongguiji 的回复:
Quote: 引用 9 楼 dracularking 的回复:

Quote: 引用 8 楼 shangtongguiji 的回复:

这个换成XML方式就可以运行,但是用annontation就报错。。


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


有annotation不是不需要**.hbm.xml了么?

是不需要,xml配置方式传达给hibernate的必要信息,annotation方式也必须同样并正确地给到才不会出错,估计是annotation漏了点什么或写错了点什么
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,