Java Hibernate一对多映射使用列表而不是集合?

Java Hibernate一对多映射使用列表而不是集合?,java,hibernate,orm,hibernate-mapping,Java,Hibernate,Orm,Hibernate Mapping,抱歉打扰了-也许这是一个非常简单的问题-但是由于某些原因,下面的版本无法解析,而带有set的版本工作正常。事实上,如果我只取set版本并用list替换set,我会得到: 嵌套异常为org.hibernate.InvalidMappingException:无法从无效映射解析映射文档 多谢各位 米沙 在Hibernate中,列表必须指定索引列 请参阅Hibernate中的第6.2.3节。列表必须指定索引列 参见您所说的第6.2.3节 而使用set的版本工作正常 下面是列表DOCTYPE <!

抱歉打扰了-也许这是一个非常简单的问题-但是由于某些原因,下面的版本无法解析,而带有set的版本工作正常。事实上,如果我只取set版本并用list替换set,我会得到:

嵌套异常为org.hibernate.InvalidMappingException:无法从无效映射解析映射文档

多谢各位 米沙


在Hibernate中,列表必须指定索引列


请参阅Hibernate中的第6.2.3节。列表必须指定索引列

参见您所说的第6.2.3节

而使用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>
你说

而使用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>