我的主要目标是加载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数据。
我猜这不能回答您的问题,但是我去过那里,做到了,我不会按照您想要的去做。