混合声明性bean和带注释的bean:org.hibernate.HibernateException找不到当前线程的Session

时间:2014-02-13 10:07:59

标签: spring hibernate session transactional transactionmanager

我得到“没有找到当前线程的会话”。 我想问题是混合声明性的xml bean和带注释的bean。 接下来,我将恢复配置。

MyLibrary项目

春季3.1.4 Hibernate 4

的applicationContext.xml

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

<context:component-scan 
    base-package="com.mycompany.dao.core, com.mycompany.services.core,
                  com.mycompany.permissionEvaluator" />

<import resource="model-core-security.xml" />

<bean id="transactionManager"
    class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory" />
</bean>
... (sessionFactory ecc...)

模型芯security.xml文件

<bean id="expressionHandler"
class="org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler">
    <property name="permissionEvaluator" ref="permissionEvaluator" />
</bean>

<security:global-method-security
    pre-post-annotations="enabled">
    <security:expression-handler ref="expressionHandler" />
</security:global-method-security>

使用组件扫描我创建bean:AccountService,AccountDAO和PermissionEvaluator。

AccountService.java(com.mycompany.services)

@Service("accountService")
@Transactional
public class AccountServiceImpl implements AccountService {

    @Resource
    private AccountDAO accountDAO;

   ...
}

AccountDAO.java(com.mycompany.dao)

@Repository
@Transactional
public class HibernateAccountDAOImpl implements AccountDAO {

   ...query...
}

(AccountService e AccountDAO是交易性的)

现在,在 AccountController.java 中,我打电话给 accountService.listAccounts()就可以了

但是,如果我将AccountService注入PermissionEvaluator类(以下代码段),则在调用 accountService.listAccounts()

时,AccountController会获取找不到当前线程的会话

PermissionEvaluator.java(com.mycompany.permissionEvaluator)

Component("permissionEvaluator")
public class PermissionEvaluatorImpl implements PermissionEvaluator {

    @Resource
    private AccountService accountService;

    ...
}

我在model-core-security.xml中声明的expressionHandler bean中使用由component-scan创建的PermissionEvaluator(带有AccountService,AccountDAO)。

可能是“找不到当前线程的会话”的原因了吗?

1 个答案:

答案 0 :(得分:-1)

@Transactional 什么是你的导入包

import org.springframework.transaction.annotation.Transactional; ??

你可以尝试导入&#34;导入javax.transaction.Transactional;&#34;