从 Spring 独立客户端调用代理 DAO 方法:- 无法初始化代理 - 无会话

Invoking proxied DAO methods from Spring stand alone client :- could not initialize proxy - no Session

我的 class 路径 中有一个 第三方 jar,它有一些服务和 DAO 在 Spring 2.0.6 和Hibernate3.2.6. 我需要调用一些服务和daos.

使用 ClassPathXmlApplicationContext 我能够加载应用程序上下文并能够访问服务和 daos。服务和 dao 都遵循 ProxyFactoryBean 模式。

当我访问具有一些单值的 DAO 时出现问题associations.When我正在访问关联的实体我遇到了延迟初始化问题。

要解决此问题:- 如果它在 我自己的应用程序 JAR 中,我将能够更改 获取类型 进入 joinDAOImpl 方法我可以使用 Hibernate.initialize().

有没有办法从独立代码本身避免这个问题?或任何其他无需修改 applicationContext.xml 和 DAOImpl

即可解决此问题的方法

您需要将调用方方法放入一个事务中。

如果你有 Spring 事务环境,你可以把 DAO services/repositories 的调用放在你自己的 service/method 中,标记为 @Transactional,或者如果事务支持未启用,但您的应用程序中仍有 spring 支持,您可以直接使用 TransactionTemplate,由 spring

提供
@Autowire 
private PlatformTransactionManager txManager; 

TransactionTemplate template  = new TransactionTemplate(this.txManager); 
template.execute( new TransactionCallback<Object>(){ 
  public void doInTransaction(TransactionStatus status){ 
   // work done here will be wrapped by a transaction and committed. 
   // status.setRollbackOnly(true) is called or an exception is thrown 
  } 
});

否则,您必须自己手动处理事务性,具体取决于您的应用使用的技术。