Hibernate 在具有Web服务和SOAP的客户机/服务器应用程序中使用惰性属性

Hibernate 在具有Web服务和SOAP的客户机/服务器应用程序中使用惰性属性,hibernate,web-services,soap,lazy-loading,Hibernate,Web Services,Soap,Lazy Loading,我们有一个巨大的客户机/服务器应用程序。服务器公开多个Web服务,其中大多数服务检索/填充复杂业务模型的不同部分 目前没有延迟功能,因此每次发出请求时都会检索并返回完整模型,即使客户端只需要一个属性值 例如,考虑下一个模型图: 然后,我们提供了一项服务,根据不同的标准获取模型: 数十个客户使用这些方法,但每个客户都需要填充模型的不同部分。由于我们没有延迟加载功能,所以即使客户端可能只需要一个属性值,我们也会在每次调用时检索完整的模型。这增加了服务器从DB查询信息所需的时间以及序列化/反序列化

我们有一个巨大的客户机/服务器应用程序。服务器公开多个Web服务,其中大多数服务检索/填充复杂业务模型的不同部分

目前没有延迟功能,因此每次发出请求时都会检索并返回完整模型,即使客户端只需要一个属性值

例如,考虑下一个模型图:

然后,我们提供了一项服务,根据不同的标准获取模型:

数十个客户使用这些方法,但每个客户都需要填充模型的不同部分。由于我们没有延迟加载功能,所以即使客户端可能只需要一个属性值,我们也会在每次调用时检索完整的模型。这增加了服务器从DB查询信息所需的时间以及序列化/反序列化对象所需的时间

在服务器中,我们使用Hibernate,但由于客户端上缺少功能,因此一切都很紧迫


我们如何通过SOAP Web服务实现这种机制?已经有可用的吗?

我希望有几个选项

  • 延迟加载:修改hibernate层以仅加载每个请求中所需的对象

  • 过滤SOAP对象:每个服务只返回客户端需要清理整个模型的不必要对象和属性的信息

  • 第一个选项将通过提高服务器性能(减少查询)和避免序列化不必要的对象来缩短响应时间,但它需要重新实现服务器数据库层和使用它的服务

    第二个选项仅最小化序列化和反序列化时间以及网络传输时间,但实现非常本地化,允许您在不更改接口的情况下维护实现,甚至在将来重新设计服务器(例如实现选项1)


    第一个选项看起来是最合理的,但是你必须考虑服务器上的其他受影响的服务和重新实现的时间。

    你需要在休眠侧做这件事。延迟加载模型不是SOAP函数,而且在SOAP世界中没有任何东西支持它。简而言之,它将是一个自定义函数。您可以在Hibernate中使用结果分页。此外,您还需要了解为什么这些设计会吸引一切。回答起来有点难。谢谢你的回答。第一种方法的问题是,GetModelA(FilterA)webservice方法有几十个客户端,每个客户端都需要来自ModelA的不同数据集。目前无法将这些需求传达给服务器,当惰性属性达到序列化边界时,它们就会丢失。对于第二种方法,我们有一个类似的问题,因为无法向服务器传达哪些内容可以过滤掉,哪些内容不能过滤掉,如果我们能够传达,我们应该选择选项1。我同意,您需要在第一步中重新设计SOAP服务接口,以便客户机能够以某种方式指示他/她将需要的数据。也许您可以提出一个具有新服务规范的版本2.0,以便在使用选项1或2anda que hablando en inglés con un maño;)重新实现服务器服务时,可以逐步迁移到客户端加西亚,法国大豆,加泰罗尼亚和卡斯特拉诺,我要去墨西哥
    目前无法将这些需求传达给服务器
    ,需要哪些?你说的是客户的需求吗?如果是的话,那么,如果服务器不知道客户想要什么,那么就没有办法阻止服务器加载整个模型!!!