我的主要目标是加载xml的ISO19115-2并将其存储到数据库中。
使用这个Generate hibernate entity beans from XSD我创建了所有类,我可以用Java读取xml和unmarshalling。
现在我想要做的是生成数据库模式(NB有900多个类)。
我认为解决方案可能是使用hibernate将对象映射并存储到数据库中。
我已经创建了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,我无法手动为所有类创建映射。
答案 0 :(得分:3)
hyperjaxb作者在这里。
我非常了解ISO 19115模式,我绝对不建议在关系数据库中保存这些文档的XML实例。几年前我开发了一个地理元数据管理产品(其中包括)完成了这个(在关系数据库中保存了ISO 19115),现在,几年后我真的说 - 这不是正确的设计
我确实设法让Hyperjaxb适用于ISO 19115模式,所以原则上这是有效的。但我终于发现,在规范化的数据库模式中从结构上保存ISO 19115数据没有多大意义。通常使用过滤器编码作为查询语言,通过CSW接口访问ISO 19115文档。过滤器编码主要使用基于“属性”(ogc:PropertyIsLike
等)的表达式。因此,最好只通过支持的属性索引每个XML实例。您实际上并不需要为此配置ISO 19115数据的结构存储。
我想这不能回答你的问题,但我一直在那里,做到了,我不会这样做。