很抱歉打扰-也许这是一个非常简单的问题- 但由于某些原因,下面的版本无法解析,而带有set的版本可以正常工作。实际上,如果我仅使用set版本并将set替换为list,则会得到:
嵌套异常为org.hibernate.InvalidMappingException:无法从无效映射中解析映射文档
谢谢米莎
<!-- bi-directional one-to-many association to SpreadsheetImportTemplateColumn --> <list name="columns"> <!-- <set name="columns" lazy="false" inverse="true" cascade="all-delete-orphan" sort="natural" order-by="voided asc, preferred desc, date_created desc"> --> <key column="template_id" not-null="true" /> <!-- <one-to-many class="SpreadsheetImportTemplateColumn" /> </set> --> </list>
你说
而带有set的版本可以正常工作
这是清单DOCTYPE
<!ELEMENT list ( meta*, subselect?, cache?, synchronize*, comment?, key, (index|list-index), (element|one-to-many|many-to-many|composite-element|many-to-any), loader?,sql-insert?,sql-update?,sql-delete?,sql-delete-all?, filter* )>
您可以看到,列表元素 需要index或list-index元素 ,key元素以及以下之一
这里是列表索引DOCTYPE
<!-- Declares the type and column mapping for a collection index (array or list index, or key of a map). --> <!ELEMENT list-index (column?)> <!ATTLIST list-index column CDATA #IMPLIED> <!ATTLIST list-index base CDATA "0">
所以你应该使用
<list name="columns"> <key column="template_id" not-null="true"/> <list-index column="WHICH COLUMN SHOULD BE USED AS INDEX"/> <one-to-many class="SpreadsheetImportTemplateColumn" /> </list>
但是,如果您要使用列表而不是集合 ,并且没有list-index列 ,则可以使用bag。初始化如下
Collection<SpreadsheetImportTemplateColumn> columns = new ArrayList<SpreadsheetImportTemplateColumn>();
并定义此映射
<bag name="columns"> <key column="template_id" not-null="true"/> <one-to-many class="SpreadsheetImportTemplateColumn"/> </bag>