【问题标题】:JAXb, Hibernate and beansJAXb、休眠和 bean
【发布时间】:2017-08-22 08:43:16
【问题描述】:

目前我正在开发一个包含 Spring web-service、hibernate 和 JAXb 的项目。

1) 我已经使用 IDE 的“休眠代码生成”生成了休眠 bean,

2) 另外,我使用 maven 编译器生成了 jaxb bean。

..

现在,我的问题是,

1) 这是正确的方法吗? (有这么多豆子)。

2) 我应该使用 JAXb bean 处理到服务层吗?如何保持层解耦?

3) 或者,我是否需要创建另一组 bean,即。将(JAXb bean)映射到(新 bean)到(休眠 bean)?

.

请说说你的看法?

谢谢, 阿迪

【问题讨论】:

    标签: java hibernate jaxb


    【解决方案1】:

    你知道,你不可能让一切都完全解耦。总会有一层知道其他两层。

    通常当我设计 3 层架构时,例如:

    1. 服务层 - 可能使用 JAXB、公开 Web 服务或其他 API 的层
    2. 业务层 - 任何真实的逻辑
    3. 持久层 - 休眠

    我允许业务层了解服务层 (JAXB) 和持久层(休眠 bean)。但是我不允许服务层和持久层相互了解。

    【讨论】:

    • 谢谢,非常感谢。那么,拥有 JAXb bean 和 Hibernate bean 可以吗?在这种情况下,我将不得不在业务层中进行 jaxb->hibernate beans 映射。是这样吗?
    • 是的。根据我的经验,通常服务层 bean 和持久层 bean 并不相同。当你开始设计时,你可能认为它们是相同的,但后来 API 层有一种含义,而持久层可能有另一种含义。
    • 好的。我实际上只是害怕使用例如做映射。业务层中的 JAXBElement 类。通过这种方式,我的业务层与 Web 服务相关联。如果我需要写另一个客户端(需要访问业务层),那就不好了。
    • 我没有说业务层会在内部使用 JAXB 类。但它会从服务层接收它们。您的问题没有完全正确或完全错误的解决方案。试着找到平衡点。
    • +1 表示“您的问题没有完全正确或完全错误的解决方案。尝试找到平衡点。”
    【解决方案2】:

    注意:我是EclipseLink JAXB (MOXy) 的负责人,也是JAXB 2 (JSR-222) 专家组的成员。 EclipseLink 还提供了出色的JPA implementation(开源自TopLink)。

    维护多个模型需要成本。您添加的每个模型都会引入必须编写、测试和维护的 bean 到 bean 的转换。

    另一种方法是对 JPA 和 JAXB 绑定使用相同的 bean。对于这个用例,从域模型开始并添加 JAXB 和 JPA 元数据以将映射应用到 XML 和数据库会更容易。以下是利用单个模型创建 RESTful Web 服务的示例:

    由于 EclipseLink 提供 JAXB 和 JPA 实现,我们提供了许多扩展来简化此操作:


    更新

    回应:

    同意你所说的。但是,使用相同的 bean 会耦合 代码非常紧密并且高度依赖。换一个 layer 也需要在其他地方进行更改。你说什么?

    这完全取决于你如何看待事物。我对构建数据访问服务的偏好是设计和构建一个可靠的域模型。然后使用 JPA 和 JAXB 解决 object-relational 和 object-XML 之间的阻抗不匹配问题。

    一种模型方法

    对 JPA 和 JAXB 使用一个模型意味着当您对模型进行更改时,您需要在那时决定如何为 JPA 和 JAXB 处理它(这可能是好是坏)。如果您不希望模型中的每个新增内容都影响 JAXB 映射,您可以利用 @XmlAccessorType(XmlAccessType.NONE) 等 JAXB 概念。

    两个(或更多)模型方法

    当您想要添加一个映射到关系和 XML 的字段时,您需要将它添加到两个模型并添加必要的转换逻辑。在这种情况下,保持模型解耦是有代价的。

    【讨论】:

    • 同意你的说法。但是,使用相同的 bean 将非常紧密地耦合代码并且将高度依赖。一层的改变也需要其他地方的改变。你说什么?
    • 当您有多个数据层 bean 时,您将如何处理这种情况?例如: JPA 和 opencsv 或其他基于文本的 bean ?耦合所有这些仍然有意义吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2019-04-13
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多