休眠,Spring Web Service事务问题

| 我有两个应用程序。一个是OrderService,另一个是TradeService。 在贸易服务中,有一种'Buy \'交易方法。 当Trade Service使用Web Service调用Order服务的SubmitOrder方法时,会出现问题。 问题描述: “购买”方法中的所有步骤都在一笔交易下。 当我们调用buy方法时,它将创建一个Order对象。 当此方法使用Web服务调用Submit Order方法时,它将传递订单ID。 提交订单方法使用此ID从数据库加载订单对象。 但是在Load方法中,它给出了惰性初始化异常:会话已关闭。 (两个应用程序共享相同的数据库) 对此的可能解决方案是使Submit Order方法具有事务性。 这导致另一个死锁问题。 死锁的原因 A. Buy方法将ID为\'xyz \'的Lock Order对象锁定。并发送相同的ID提交订购方法。 B.现在购买方法正在等待提交订单的答复。 C.提交订单方法无法加载订单对象,因为它已被购买方法锁定。 D.因此,Submit Order方法正在等待获取锁。因此,它是死锁状态。 注意:这两个应用程序都使用Spring MVC,Spring Web Service和Hibernate。 请帮助我摆脱这种情况。预先感谢。(如果需要,我可以发布部分代码)     
已邀请:
通常,不可能在Web服务调用的两侧使用相同的数据库事务。 -至少根本不可能通过Web服务传输连接。 因此,您必须忍受以下事实:您已经/需要两次数据库事务。一侧一一。 -除此之外(导致您的惰性初始化异常),如果Web服务-服务器端接收到一个实体,则该实体未附加到任何会话,因此,如果您尝试访问尚未加载(延迟加载)的属性然后得到这个layz加载异常。 您需要做的是,打开一个事务,然后首先将该实体附加到该事务。     
为什么TradeService创建订单?我希望这是OrderService的责任。这样一来,对相同资源也不会产生争用。 是的,两种服务都应该是可交易的。之所以得到LazyInitializationException,是因为您的装入方法可能正在进行2个单独的数据库调用以构建Order实例,并且在第一个数据库调用之后关闭了会话。     

要回复问题请先登录注册