我的主要目标是加载ISO19115-2的xml并将其存储到数据库中。

通过此Generate hibernate entity beans from XSD,我创建了所有类,并且可以读取xml并在Java中解组。

现在我想做的是生成数据库模式(注意,这里有900多个类)。

我认为解决方案可能是使用休眠将对象映射和存储到数据库中。

我创建了hbm.xml映射文件,但是hibernate不喜欢它们,并给出如下错误:

org.hibernate.MappingException: Foreign key (FK9C4C4E4C6991863A:DIRECTPOSITIONTYPE [LOWERCORNER])) must have same number of columns as the referenced primary key (ENVELOPETYPE [LOWERCORNER,idx])

并且有成千上万个此类错误。

具有jaxb注释的类,还有另一种获取数据库模式的方法吗?

还要注意,使用像http://xsd2db.sourceforge.net/这样的工具不是解决方案,因为我想从Java加载xml,并且无法手动为所有类创建映射。

最佳答案

hyperjaxb作者在这里。

我非常了解ISO 19115模式,因此绝对不建议将这些文档的XML实例保存在关系数据库中。几年前,我开发了一种地理元数据管理产品(除其他外)就做到了这一点(将ISO 19115保存在关系数据库中),现在,几年后,我真的要说-这不是正确的设计。

那时我确实设法使Hyperjaxb适用于ISO 19115模式,因此原则上可以使用。但是我终于发现,在规范化的数据库模式中以结构化方式保存ISO 19115数据没有多大意义。通常通过使用过滤器编码作为查询语言的CSW接口访问ISO 19115文档。过滤器编码主要使用基于“属性”的表达式(ogc:PropertyIsLike等)。因此,最终最好只在支持的属性上对每个XML实例建立索引。为此,您实际上并不需要结构化存储ISO 19115数据。

我猜这不能回答您的问题,但是我去过那里,做到了,我不会按照您想要的去做。

07-24 18:48
查看更多