一到许多映射的冬眠与列表合作,但不适合集合?
-
01-10-2019 - |
题
很抱歉打扰 - 也许这是一个非常简单的问题 - 但是由于某种原因,以下版本无法解析,而带有SET的版本则可以正常进行。实际上,如果我只采用设定版本并用列表替换设置,我会得到:
嵌套异常是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*
)>
您可以看到的屁股,列出元素 需要索引或列表索引元素, ,一个关键要素,以及以下一个
- 元素
- 一对多
- 多对多
- 复合元素
- 许多人
这里是列表指数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>
但是,如果您想使用列表而不是集合 并且没有列表指数列, ,您可以使用袋子。初始化如下
Collection<SpreadsheetImportTemplateColumn> columns = new ArrayList<SpreadsheetImportTemplateColumn>();
并定义此映射
<bag name="columns">
<key column="template_id" not-null="true"/>
<one-to-many class="SpreadsheetImportTemplateColumn"/>
</bag>
其他提示
在Hibernate中,列表必须指定索引列。
请参阅第6.2.3节 冬眠文档.
不隶属于 StackOverflow