代码之家  ›  专栏  ›  技术社区  ›  Murugesh

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

  •  1
  • Murugesh  · 技术社区  · 10 年前

    我有一个 我的类路径中的第三方jar 它在s之上开发了一些服务和DAO spring 2.0.6和Hibernate 3.2.6。 我需要打电话给一些服务部门和道。

    使用 ClassPathXmlApplicationContext 我能够加载应用程序上下文,并能够访问服务和dao。服务和dao都在跟踪 代理因子Bean 图案

    当我访问具有一些单值关联的DAO时,问题就出现了。当我访问关联实体时,我遇到了惰性初始化问题。

    要解决此问题,请执行以下操作: 我自己的应用程序JAR 我可以更改 提取类型 进入 参加 或在 DAOImpl(DAOIImpl) 我可以使用的方法 Hibernate初始化()。

    有没有办法从独立代码本身避免这个问题?或任何其他解决此问题的方法,无需修改 应用程序上下文.xml 和DAOImpl

    1 回复  |  直到 10 年前
        1
  •  2
  •   vtor    10 年前

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

    如果您有Spring事务环境,您可以将DAO服务/存储库的调用放在自己的服务/方法中,该方法标记为 @Transactional ,或者如果未启用事务支持,但应用程序中仍有spring支持,则可以使用 TransactionTemplate 直接,由弹簧提供

    @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 
      } 
    });
    

    否则,根据应用程序使用的技术,您必须自己手动处理事务性。