当我尝试使用带有spring-Hibernate3的javaConfig时,我无法获得session.but只是一个例外

时间:2017-03-17 09:44:48

标签: hibernate spring-transactions spring-java-config

我最近正在学习javaconfig。所以我试图将我的xml配置传输到javaConfig,但是当我在tomcat上运行项目时完成我的代码后,当我尝试让会话查询时,我收到错误从我的db.I真的很困惑。

在我阅读了一些博客,并在互联网上搜索可能的原因之后,我得到了一个可能的解释,即交易似乎无法正常工作。 (但是错误显示交易运作良好。所以我根本不知道)

如果我得到了正确的假设我如何更正代码?如果没有,我的问题是什么原因?

任何建议都可以提供帮助。

(抱歉我的英语很差,我希望它不会打扰你。)

这是我的java配置代码。

为RootApplicationContext写了这个类

@Configuration
@EnableAspectJAutoProxy
@EnableTransactionManagement
@ComponentScan(basePackages = { "com.*" })
@PropertySources({ @PropertySource(value = "classpath:database.properties"),
        @PropertySource(value = "classpath:hibernate.properties") })
@Import(value = { HibernateConfig.class, DruidConfig.class, TransactionConfig.class })
public class SpringContextConfig {

}

这是事务javaConfig

@EnableTransactionManagement
public class TransactionConfig implements TransactionManagementConfigurer {

    @Resource
    SessionFactory sessionFactory;
    @Resource
    DataSource dataSource;

    @Bean(name = "transactionManager")
    public HibernateTransactionManager hibernateTransactionManager() {
        HibernateTransactionManager txManager = new HibernateTransactionManager();
        txManager.setDataSource(dataSource);
        txManager.setSessionFactory(sessionFactory);
        return txManager;
    }

    @Override
    public PlatformTransactionManager annotationDrivenTransactionManager() {
        return hibernateTransactionManager();
    }

}

这是需要管理的服务,我在类

上放了一个@Transactionl
@Service("locationService")
@Transactional(value="transactionManager")
public class LocationServiceImpl implements LocationService {
    @Resource
    SessionFactory sessionFactory;      
    @Resource(name = "locationDaoImp")
    LocationDao dao;

    @Override
    public Location queryLocationById(String locationId) {
        return dao.queryLocationById(locationId);
    }

我收到错误后,我尝试在daoClass上调试(作为打击),但是当我使用方法getCurrentSession()

时总是出错
Location location = (Location) sessionFactory.getCurrentSession().get(Location.class, locationId);

这是例外

Exception in thread "pool-1-thread-1" java.lang.NoClassDefFoundError: org/springframework/orm/ObjectRetrievalFailureException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:800)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2957)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1210)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1690)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:539)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:373)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.createTransactionIfNecessary(TransactionAspectSupport.java:420)
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:257)
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    at com.sun.proxy.$Proxy29.queryLocationById(Unknown Source)
    at com.test.controller.LocationController$1.execute(LocationController.java:83)
    at com.test.service.ExecuteTaskService$1.run(ExecuteTaskService.java:22)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)

1 个答案:

答案 0 :(得分:0)

好吧,在我尝试将spring-orm.jar添加到我的项目后,一切似乎都没问题,没有更多的错误,我可以得到正确的答案,并且当我调试程序时事务也正常工作。

但是我仍然对我的操作感到困惑,因为我的程序在没有spring-orm和xml配置的情况下运行良好。(我确信我的javaConfig类与我的xml配置文件没有任何区别。因为我只需将我的xml文件传输到javaConfig。)

欢迎在问题下面发表评论。