gpt4 book ai didi

java - 用于 XML 序列化的持久 BO

转载 作者:太空宇宙 更新时间:2023-11-04 06:55:16 28 4
gpt4 key购买 nike

使用一组相同的业务对象通过 XML 进行序列化(通过 JAXB 与 JAX-WS 一起使用)并通过 JPA 进行持久化是一个好主意吗?将这两种“范式”合并为一类有缺点吗?

我的一门课看起来例如像这样:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "testSuiteInfo", propOrder = {
"name",
"tests"
})
@Entity
public class TestSuiteInfo {

@Id
@GeneratedValue
@XmlTransient
protected Long id;
protected String name;
@XmlElement(nillable = true)
@OneToMany
protected List<TestInfo> tests;

// Getters and setters go here...
}

该类的对象由 JAX-WS 接收,然后由 JPA 保存。

最佳答案

我是 Hyperjaxb3 的作者,XJC 插件,它将 JPA 注释添加到模式派生类中。因此,您只需采用一个模式,然后就能够执行完整的 XML-对象-DB 往返。MOXy 可以将 JPA 实体映射到 XML as well .

现在回到你的问题。如果您对数据库、XML 表示和业务逻辑使用相同的类,那么您基本上对所有这三件事都具有相同的模型。如果这对你有用 - 很好!在许多情况下,这确实有效,因为

  • BO 通常相当简单
  • 对数据库没有具体要求(即性能)
  • 您可以控制代表您的 BO 的 XML 架构

在这些情况下,让 XML 对象和对象 DB 具有相同的类是很好的。

现在考虑一个更复杂的情况:

  • 您无法控制您的 XML 架构,因为它是交换接口(interface)的某种规范
  • 您有性能要求,并且必须相应地对数据库架构进行建模
  • 您希望为您的业务逻辑提供经过优化的 BO 代码,其中包含增值方法,而不仅仅是架构派生的内容

所有这些都对您的 XML、JPA 和 BO 部分提出了特定的约束/要求。仅用一种模型(无论是 JAXB 还是 JPA)就能满足所有这些要求吗?不太可能。从规范模式生成 JAXB 类并单独仔细设计 JPA 实体可能会更好。是的,在这种情况下您需要一个映射器,但这是一个较小的弊端。

另请考虑以下问题:

  • 如果您的规范架构发生变化,会发生什么情况?如果将发布另一个版本并且您需要支持它?
  • 如果您必须在 JPA 或数据库中实现一些新功能怎么办?比如,对某些东西进行非规范化以获得更好的性能?

从另一方面来说,如果你

  • 优先使用 XML 模式,不太关心数据库(只需要以某种方式保存事物)或
  • 首先采用 JPA,不太关心 XML(只需要序列化 ​​XML 中的内容)并且
  • 不要浪费精力编写映射器

那么将 JPA 和 JAXB 放在同一个类中就完全可以了,为什么不呢。(第一种方法是 Hyperjaxb3,第二种方法是 MOXy)。

关于java - 用于 XML 序列化的持久 BO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844002/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com