【问题标题】:Spring 3.1.1 with hibernate 4.1 annotations configuration带有休眠 4.1 注释配置的 Spring 3.1.1
【发布时间】:2012-05-06 03:20:57
【问题描述】:

我正在使用 spring3.1.1 和 hibernate 4.1 设置新项目。 当我运行我的项目时,我收到以下错误

java.lang.NoSuchMethodError: org.hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/classic/Session;
at com.humancapital.dao.TestModelDAOImpl.getTestModelList(TestModelDAOImpl.java:22)

我的 applicationContext.xml

 <?xml version="1.0" encoding="UTF-8"?>

       
        <context:component-scan base-package="com.example"/>
                                      
        <!-- Use @Transaction annotations for managing transactions  -->    
        <tx:annotation-driven transaction-manager="transactionManager"/>
                                      
        <!-- PropertyConfiguer -->
        <bean id="propertyCongigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location" value="/WEB-INF/config/jdbc/jdbc.properties"></property>
        </bean>
        
        <!--  DataSource connection -->
        <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
            <property name="driverClassName" value="${jdbc.driverClassName}"></property>
            <property name="url" value="${jdbc.url}"></property>
            <property name="username" value="${jdbc.username}"></property>
            <property name="password" value="${jdbc.password}"></property>  
        </bean>
        
        <!-- Hibernate SessionFactory -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="myDataSource"></property>
            <property name="annotatedClasses">
                <list>
                    <value>com.humancapital.dao.TestModel</value>
                </list>
            </property>
            <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop> 
            </props>
            </property>
        </bean>
        

        
        <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
            <property name="sessionFactory" ref="sessionFactory"></property>
        </bean>
        
        <context:annotation-config/>
        
        <bean id="testModelDAO" class="com.example.dao.TestModelDAOImpl"></bean>

MyDAOImpl

@Repository
public class TestModelDAOImpl implements TestModelDAO {

@Autowired
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory){
    this.sessionFactory = sessionFactory;
}

@SuppressWarnings("rawtypes")
@Override
    @Transactional(readOnly=true,propagation=Propagation.REQUIRES_NEW)
public List getTestModelList() {
    System.out.println(sessionFactory.toString());
    return sessionFactory.getCurrentSession().createCriteria(TestModel.class).list();
}
}

我已经添加了我的依赖 jars 请给我建议

antlr-2.7.7.jar
antlr-runtime-3.0.jar
commons-collections-3.2.1.jar
commons-dbcp-1.4.jar
commons-fileupload-1.2.jar
commons-lang-2.4.jar
commons-logging.jar
commons-pool-1.5.4.jar
dom4j-1.6.1.jar
ejb3-persistence-3.3.1.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.1.Final.jar
hibernate-entitymanager-4.1.1.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-validator-4.0.2.GA.jar
jackson-core-asl-1.9.2.jar
jackson-jaxrs-1.8.5.jar
jackson-mapper-asl-1.9.2.jar
javassist-3.15.0-GA.jar
jboss-logging-3.1.0.CR2.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
json-lib-2.3-jdk13.jar
jstl-1.2.jar
jta-1.1.jar
log4j-1.2.14.jar
mail.jar
mysql-connector-java-5.0.8-bin.jar
org.springframework.aop-3.1.1.RELEASE.jar
org.springframework.asm-3.1.1.RELEASE.jar
org.springframework.aspects-3.1.1.RELEASE.jar
org.springframework.beans-3.1.1.RELEASE.jar
org.springframework.context.support-3.1.1.RELEASE.jar
org.springframework.context-3.1.1.RELEASE.jar
org.springframework.core-3.1.1.RELEASE.jar
org.springframework.expression-3.1.1.RELEASE.jar
org.springframework.jdbc-3.1.1.RELEASE.jar
org.springframework.jms-3.1.1.RELEASE.jar
org.springframework.js-2.0.8.RELEASE.jar
org.springframework.orm-3.1.1.RELEASE.jar
org.springframework.oxm-3.1.1.RELEASE.jar
org.springframework.test-3.1.1.RELEASE.jar
org.springframework.transaction-3.1.1.RELEASE.jar
org.springframework.web.servlet-3.1.1.RELEASE.jar
org.springframework.web-3.1.1.RELEASE.jar
servlet-api.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
slf4j-simple-1.6.1.jar
spring-modules-validation-0.7.jar
standard.jar

请帮我完成项目设置。 请给我们一些建议,在建立新的项目结构时,我们需要集中精力在哪些地方需要对未来的升级进行较少的更改。

对不起,我是 stackoverflow 的新手,我不知道如何重播命令

【问题讨论】:

  • 没有传播设置你试过了吗?
  • 为什么需要hibernateManagedSession=true
  • 我已经尝试过没有传播,但我仍然遇到同样的异常。
  • 当我删除 hibernateMessageSession= true 时,它​​给出了异常 java.lang.NoSuchMethodError: org.hibernate.SessionFactory.getCurrentSession()Lorg/hibernate/classic/Session;

标签: java spring hibernate annotations


【解决方案1】:

这是因为你启用了 hibernate.current_session_context_class 属性

在将 Hibernate 与 Spring 结合使用会破坏正确的会话和事务管理时,您不应该使用该属性。唯一需要设置此属性的情况是在 JTA 环境中使用 Spring 和 Hibernate,否则不要使用它。

【讨论】:

  • 感谢 danny.lesnik,当我删除该行时,我得到 No Session found for current thread exception org.hibernate.HibernateException: No Session found for current thread at org.springframework.orm.hibernate4.SpringSessionContext。 currentSession(SpringSessionContext.java:97) at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:1039) sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
  • 您的交易在哪里?看起来您正试图超出事务范围。
  • 感谢 danny.lesnik。我在我的代码中添加了@Transactional(readOnly=true,propagation=Propagation.REQUIRES_NEW) 终于可以正常工作了。
  • 我建议你改用 Propagation.REQUIRES。
  • 好的 danny.lesnik 如果建议一些关于休眠核心的书,这对我很有帮助。我已经用谷歌搜索了一些教程,但我仍然没有得到适合休眠的书。谢谢。对不起我的英语
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 2011-03-24
  • 2011-07-22
  • 2014-12-09
相关资源
最近更新 更多