JAXb,Hibernate和bean

目前我正在开发一个带有Spring web-service,hibernate和JAXb的项目。

1)我使用IDE的hibernate代码生成生成了hibernate bean,

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

..

现在,我的问题是,

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

2)我应该使用JAXb bean来处理服务层吗? 如何保持图层分离?

3)或者,我是否需要创建另一组bean,即。 map(JAXb bean)到(新bean)到(hibernate bean)?

请说出你的看法?

谢谢,阿迪

你知道,你不能把所有东西完全解耦。 总会有一层知道另外两层。

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

  1. 服务层 – 可能使用JAXB的服务层,公开Web服务或其他API
  2. 业务层 – 任何真正的逻辑
  3. 持久层 – hibernate

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

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

维护多个模型需要付出代价。 您添加的每个模型都会引入必须编写,测试和维护的bean-to-bean转换。

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

由于EclipseLink提供了JAXB和JPA实现,因此我们提供了许多扩展来使这更容易:


UPDATE

回应:

同意你说的话。 但是,使用相同的bean将非常紧密地耦合代码并且将高度依赖。 一层中的变化也需要在其他地方进行更改。 你说的话?

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

一种模式方法

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

两种(或更多)模型方法

如果要添加映射到关系和XML的字段,则需要将其添加到两个模型并添加必要的转换逻辑。 在这种情况下,保持模型解耦是有成本的。