从 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 中,我将能够更改 获取类型 进入 join 或 DAOImpl 方法我可以使用 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
}
});
否则,您必须自己手动处理事务性,具体取决于您的应用使用的技术。
我的 class 路径 中有一个 第三方 jar,它有一些服务和 DAO 在 Spring 2.0.6 和Hibernate3.2.6. 我需要调用一些服务和daos.
使用 ClassPathXmlApplicationContext 我能够加载应用程序上下文并能够访问服务和 daos。服务和 dao 都遵循 ProxyFactoryBean 模式。
当我访问具有一些单值的 DAO 时出现问题associations.When我正在访问关联的实体我遇到了延迟初始化问题。
要解决此问题:- 如果它在 我自己的应用程序 JAR 中,我将能够更改 获取类型 进入 join 或 DAOImpl 方法我可以使用 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
}
});
否则,您必须自己手动处理事务性,具体取决于您的应用使用的技术。