Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXb、Hibernate和bean_Java_Hibernate_Jaxb - Fatal编程技术网

Java JAXb、Hibernate和bean

Java JAXb、Hibernate和bean,java,hibernate,jaxb,Java,Hibernate,Jaxb,目前,我正在使用SpringWeb服务、hibernate和JAXb进行一个项目 1) 我已经使用IDE“hibernate代码生成”生成了hibernate bean 2) 此外,我还使用maven编译器生成了jaxb bean 现在,我的问题是 1) 这是正确的方法吗?(有这么多豆子) 2) 我应该使用jaxbbeans来处理服务层吗?如何保持层的解耦 3) 或者,我是否需要创建另一组bean,即映射(jaxbbeans)到(新bean)到(hibernatebeans) 请谈谈你的看法

目前,我正在使用SpringWeb服务、hibernate和JAXb进行一个项目

1) 我已经使用IDE“hibernate代码生成”生成了hibernate bean

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

现在,我的问题是

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

2) 我应该使用jaxbbeans来处理服务层吗?如何保持层的解耦

3) 或者,我是否需要创建另一组bean,即映射(jaxbbeans)到(新bean)到(hibernatebeans)

请谈谈你的看法

谢谢,
adi

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

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

  • 服务层——可能使用JAXB的层,公开web服务或其他API
  • 业务层-任何真正的逻辑
  • 持久层-hibernate

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

    注意:我是专家组的负责人和成员。EclipseLink还提供了一个优秀的(开源的)

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

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

    由于EclipseLink同时提供JAXB和JPA实现,我们提供了许多扩展来简化这一过程:


    更新

    针对:


    同意你说的话。然而,使用相同的bean会产生耦合 代码非常紧密,并且高度依赖。一刀切 图层在其他地方也需要更改。你说什么

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

    一种模式方法

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

    两个(或更多)模型接近


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

    谢谢,非常感谢。那么,拥有JAXb bean和Hibernate bean就可以了?在本例中,我必须在业务层中进行jaxb->HibernateBeans映射。是吗?是的。根据我的经验,通常服务层bean和持久层bean是不同的。在开始设计时,您可能会认为它们是相同的,但稍后API层会有一种含义,而持久性层可能会有另一种含义。OK。实际上,我只是害怕在业务层使用JAXBElement类进行映射。这样,我的业务层就与Web服务绑定在一起了。如果我需要编写另一个客户机(需要访问业务层),那就不好了。我没有说业务层将在内部使用JAXB类。但它将从服务层接收它们。您的问题没有完全正确或完全错误的解决方案。试着找到平衡。+1表示“你的问题没有完全正确或完全不正确的解决方案。试着找到平衡。”同意你所说的。但是,使用相同的bean将非常紧密地耦合代码,并且高度依赖。一层的变化也需要其他地方的变化。你说什么?当你有多个数据层bean时,你会如何处理这种情况?e、 g:JPA、opencsv或其他基于文本的bean?所有这些仍然有意义吗?