【问题标题】:Convert XML to database with Java使用 Java 将 XML 转换为数据库
【发布时间】:2012-01-22 20:33:15
【问题描述】:

需要:接收XML并将数据保存到数据库。

当前使用:JAXB 将 XML Schema 转换为 java 类。然后我打算使用 JPA 来持久化由 JAXB 编组的对象。

问题:我想要一些东西来弥补差距。在 JAXB 生成 Java 类之后,我必须使用 @Temporal 手动注释所有 java.util.Date 字段;我必须将@Entity 放在每个生成的类的顶部......等等。

我遇到了 Hyperjaxb。但是我找不到关于它的少量文档,并且无法使其正常工作。

我对完全不同的方法持开放态度。这似乎是一个常见的问题,所以也许有一个通用的解决方案。

【问题讨论】:

    标签: java jakarta-ee jpa jaxb hyperjaxb


    【解决方案1】:

    注意:我是 EclipseLink JAXB (MOXy) 负责人,也是JAXB 2 (JSR-222) 专家组的成员。

    如果您已经有一个现有的数据库模式,您可以使用 Eclipse 中的 Dali 工具(Web 工具项目的一部分)从数据库中生成您的 JPA 实体:

    JAXB 是异常配置,这意味着您只需要在要覆盖默认行为的地方添加注释。 Dali 还有一些工具可以更轻松地添加 JAXB 注释:

    JPA 实体有时使用双向关系和复合键,这些可能很难映射到 XML。 EclipseLink JAXB (MOXy) 包含一些扩展以使这更容易(注意 EclipseLink 还提供了 JPA 实现):

    【讨论】:

    • 赞成通过异常和键提及配置,否则工具依赖性不是解决问题的最佳方法
    • 我见过 MOXy,但它似乎只对以下有用:Database->Java->XML,我需要 XML->Java->Database。我再看看确认一下,谢谢。
    • @Mowgli - MOXy 像任何 JAXB (JSR-222) 实现一样可以从 java 类或 XML 模式开始。
    【解决方案2】:

    Hyperjaxb 完全符合您的要求。这是文档:

    这里有一个入门教程:

    【讨论】:

    • 找了很久的教程,非常感谢。我会试一试的。
    • 昨天confluence服务器宕机了,所以没找到教程。感谢您的链接,否则我会放弃的。
    • 目前Hyperjaxb3不支持双向JPA2关系。
    【解决方案3】:

    我可以建议两个选项: 选项 1. 分别定义实体类型,使用相关的 JPA 注释,从模式生成 JAXB 类型,并在运行时将一个映射到另一个。如果它是一个简单的映射,您可以使用 Apache BeanUtils 将属性从一个 bean 复制到另一个,如果它是一个更复杂的映射,那么您可以使用类似 dozer

    的框架

    选项 2:从实体类型开始,从您的实体类型生成架构或手动保持实体类型和架构同步。更像您描述的选项,除了权威来源是 java 代码而不是模式。

    【讨论】:

    • 感谢您的回复。这些类非常大,我认为这两个选项都会让我编写很多与自动生成的代码非常相似的代码。但是,如果找不到其他解决方案,我会采取类似的方法。
    猜你喜欢
    • 1970-01-01
    • 2014-02-06
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-11
    • 2010-10-27
    • 2014-01-05
    • 2016-07-17
    相关资源
    最近更新 更多