用Java实现XML到数据库的转换

用Java实现XML到数据库的转换,java,jakarta-ee,jpa,jaxb,hyperjaxb,Java,Jakarta Ee,Jpa,Jaxb,Hyperjaxb,需要:接收XML并将数据保存到数据库 目前正在使用:JAXB将XML模式转换为java类。然后,我打算使用JPA持久化JAXB编组的对象 问题:我想要一些东西来弥补差距。在JAXB生成Java类之后,我必须用@Temporal手动注释所有Java.util.Date字段;我必须把@Entity放在每个生成的类的顶部…等等 我遇到了Hyperjaxb。但是我几乎找不到关于它的文档,也无法让它工作 我对完全不同的方法持开放态度。这似乎是一个常见问题,因此可能有一个通用的解决方案。我可以建议两个选项:

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

目前正在使用:JAXB将XML模式转换为java类。然后,我打算使用JPA持久化JAXB编组的对象

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

我遇到了Hyperjaxb。但是我几乎找不到关于它的文档,也无法让它工作

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

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


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

注意:我是领导,也是专家组成员

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

JAXB是异常配置,这意味着您只需要在希望覆盖默认行为的位置添加注释。Dali还提供了使添加JAXB注释更容易的工具:

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


Hyperjaxb正是您想要实现的目标。以下是文档:

以下是一个入门教程:


感谢您的回复。这些类非常大,我认为这两个选项都会让我编写大量与自动生成的代码非常相似的代码。但是,如果我找不到其他解决方案,我会求助于这样的方法。我赞成通过异常和键提及配置,否则依赖工具并不是解决问题的最佳方法,我见过MOXy,但它似乎只在以下情况下有用:数据库->Java->XML,我需要XML->Java->数据库。我会再看一眼以确保,谢谢。@Mowgli-MOXy和任何JAXB(JSR-222)实现一样,都可以从java类或XML模式开始。我一直在寻找教程,非常感谢。我要试一试。confluence服务器昨天坏了,这就是我没有找到教程的原因。谢谢你的链接,否则我会放弃的。目前,Hyperjaxb3不支持双向JPA2关系。