【问题标题】:Splitting Hibernate-mapped program into front-end and back-end using Spring Web Service使用 Spring Web Service 将 Hibernate 映射的程序拆分为前端和后端
【发布时间】:2012-06-17 12:24:46
【问题描述】:

我计划将我的系统拆分为前端和后端。目前我的应用程序直接与数据库通信,但我想创建一个 Spring Web 服务来代替它。我的问题在于使用 Hibernate 将我的对象映射到数据库表。

我需要我的前端程序与数据库进行持久的最新交互。这再次意味着我必须编写大量 Web 服务端点来处理所有查询和更新。这再次使其 Hibernate 映射毫无意义,因为我没有获得任何东西。

我的问题是:是否有一种经过验证且合理的方法可以将休眠映射对象(如果可能,通过 SOAP)传递到前端,然后提交对这些对象所做的更改?

【问题讨论】:

  • 为什么要这样做?你想解决哪个问题?
  • 快速评论,我认为您可能在重用方面迈出了一步。实现此目的的更好方法是将域对象放入 jar 中并使用该域 jar 访问数据库。通过您的休眠域。这样,您的 Web 服务端点可用于对使用休眠域进行数据访问的业务服务进行建模。如果您使用 Maven 之类的东西,许多项目可以将域 jar 作为依赖项共享

标签: java web-services spring hibernate soap


【解决方案1】:

简而言之:没有。

在不同的应用程序中分离和重新附加 hibernate 管理的对象,就像您所想的那样,在您处理完所有延迟加载异常。这将是一种痛苦。

您要走的路最终通向一个架构,该架构增加了一个额外的间接层,Data Objects 在业务服务和这些业务服务的客户端之间传输。只有您的业务服务才能直接与数据库对话。显然这很耗时,并且必须尽可能避免。这就是为什么我请你解释你要解决的问题。

【讨论】:

  • 这种架构是太多“建筑师”、“顾问”和太多政治的症状......真正的开发者很少会决定这种不必要的体操
  • @HansWesterbeek 抱歉,我的回答延迟了。我的问题在于尽量减少花在这方面的工作时间。我有一个具有相当广泛架构的数据库要管理。这就是为什么选择hibernate来映射它。现在,我将客户端的所有业务逻辑(包括与数据库的通信及其验证)作为 Java 应用程序。出于安全原因,我必须将大部分内容转移到后端。问题是,通过这样做,我发现自己不得不重写所有服务。我正在寻找一个抽象来解决它。
  • 我明白了……在这种情况下,您最终会得到我所描述的架构,在特定用例中以“需要知道”的方式向客户端公开对象和属性。此外,请考虑使用 REST/JSON 而不是 SOAP,这可能会节省您一些时间。
【解决方案2】:

您可以通过 SOAP 或其他序列化机制传递休眠实体,但您应该非常小心延迟加载、集合加载和从会话中分离实体 - 否则您最终可能会将所有数据库发送到只需要一个对象或休眠的地方在另一端不可用的代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-11
    • 1970-01-01
    • 2020-01-01
    相关资源
    最近更新 更多