目前我正在开发一个使用Spring web-service,hibernate和JAXb的项目。
1)我使用IDE'hibernate代码生成
生成了hibernate bean2)另外,我使用maven编译器生成了jaxb bean。
..
现在,我的问题是,
1)这是正确的方法吗? (有这么多的豆子)。
2)我应该使用JAXb bean来处理服务层吗?如何保持图层分离?
3)或者,我是否需要创建另一组bean,即。 map(JAXb bean)到(新bean)到(hibernate bean)?
请说出你的意见?
谢谢, ADI
答案 0 :(得分:5)
你知道,你不可能把所有东西完全解耦。总会有一层知道另外两层。
通常在我设计3层架构时,如:
我允许Business层了解服务层(JAXB)和持久层(hibernate bean)。但我不允许服务层和持久层相互了解。
答案 1 :(得分:3)
注意:我是EclipseLink JAXB (MOXy)主管,是JAXB 2 (JSR-222)专家组的成员。 EclipseLink还提供了出色的JPA implementation(来自TopLink)。
维护多个模型需要付出代价。您添加的每个模型都会引入必须编写,测试和维护的bean-to-bean转换。
另一种方法是为JPA和JAXB绑定使用相同的bean。对于这个用例,从域模型开始并添加JAXB&更容易。用于将映射应用于XML和数据库的JPA元数据。下面是利用单个模型创建RESTful Web服务的示例:
由于EclipseLink提供了JAXB和JPA实现,因此我们提供了许多扩展来使这更容易:
<强>更新强>
回应:
同意你所说的话。但是,使用相同的bean会结合使用 代码非常紧密,并且将高度依赖。改变一个 层也需要在其他地方进行更改。你说什么?
这完全取决于你如何看待事物。我对构建数据访问服务的偏好是设计和构建一个可靠的域模型。然后使用JPA和JAXB来解决对象关系和对象XML之间的阻抗不匹配问题。
一种模式方法
对JPA和JAXB使用一个模型意味着当您对模型进行更改时,您需要在那时决定如何为JPA和JAXB处理它(这可能是好的还是坏的)。如果您不希望模型的每个新添加都影响JAXB映射,您可以利用@XmlAccessorType(XmlAccessType.NONE)
等JAXB概念。
两种(或更多)模型方法
如果要添加映射到关系和XML的字段,则需要将其添加到两个模型并添加必要的转换逻辑。在这种情况下,保持模型解耦是有成本的。