我有大量的XML文件和XSD。
我想简单地将其转换为POJO并将它们插入到数据库中。 数据库架构在我的控制之下,所以它可以是我喜欢的。
我看了很多api,但想要另一种意见最有效。
hibernate是否有一些api从XSD创建POJO,然后将XML读入那些POJO,然后将数据插入数据库?
或者Spring有任何功能可以帮助解决这个问题吗?
我想我只是在你的观点之后,只是因为有一个我错过的API会帮助做我想要的。
由于 杰夫波特
答案 0 :(得分:3)
或者您可以绕过转换为POJO的步骤并将XML直接存储为CLOB。它稍后会允许“鸭子打字”,你可能会发现它有利。
如果您需要稍后单独查询这些对象,则映射到Java POJO是有意义的。如果您一直需要整个流,而不必查询XML中的值(例如,XPath),那么我会说将XML存储为CLOB更有意义。
答案 1 :(得分:2)
快速回答:JAXB,JPA和Spring
将XML插入数据库时,您需要考虑要对XML所代表的数据执行哪些操作。
例如,您可以将XML视为输入数据,然后创建一个以易于查询的方式保存数据的模式。如果这是您想要做的事情,那么使用JAXB作为unmarshaller,因为您可以通过xjc工具轻松地从XSD生成适当注释的pojos /实体。一些额外的JPA注释,你将有一个快速的解决方案,将XML映射到一个完整的架构,允许各种混合和匹配查询和替代视图。当然,JAXB注释可用于生成各种输出格式(XML,JSON,YAML等),因此当您想要输出此数据时,不限于XML。接下来,您可以将XML视为您希望存储的完整实体。在这种情况下,您希望将其存储为CLOB或XML(在Oracle中)。 Oracle certainly supports基于XPath的搜索,这样您就有机会查询生成的数据集。
最后,如果您认为XML过于臃肿,并且您可以控制pojos的任何结果更改,您可以将未编组的pojos作为BLOB直接序列化到数据库中。你将拥有一个相当紧凑的架构和数据库,但是在查询时你会受到影响,因为它都是二进制的。如果您必须根据旧pojos反序列化一个非常旧的数据集,那么稍后您将遇到二进制版本兼容性问题。
因此,总而言之,JAXB是处理解组和后续编组过程的一种非常好的方法。它快速而简单,并且(在@Blaise Doughan点头)在SO上得到了很好的支持。 JPA是执行数据库操作的首选技术。 Hibernate是JPA的一个实现者(具有良好的扩展),Spring通过HibernateTemplate精美地支持它。同样,你也可以使用Spring的JpaTemplate,它的学习曲线可能稍浅。
答案 2 :(得分:0)
一种常见的方法是使用JPA(即EclipseLink或Hibernate)将对象存储到数据库中,以及JAXB(即Metro,EclipseLink MOXy(我是技术主管),或者JaxMe)将对象转换为XML。
EclipseLink JAXB(MOXy)有许多用于将JPA实体映射到XML的扩展: