休眠一对多的映射工作与列表,但不是一组? [英] Hibernate one to many mapping works with a list but not a set?

查看:92
本文介绍了休眠一对多的映射工作与列表,但不是一组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

很抱歉打扰 - 也许这是一个非常简单的问题 - 但由于某种原因,以下版本无法解析,而带有set的版本正常工作。事实上,如果我只是采取设置的版本,并用列表替换集我得到:

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

谢谢
Misha

 <! -  - 双向一对多关联到SpreadsheetImportTemplateColumn  - > 
< list name =columns>
<! -
cascade =all-delete-orphansort =natural
order-by =无效asc,首选desc,date_created desc>
- >
< key column =template_idnot-null =true/>
<! -
<一对多等级=SpreadsheetImportTemplateColumn/>
< / set>
- >
< / list>


解决方案

您说过


而设置的版本正常工作


这里列出DOCTYPE

 <!ELEMENT list(
meta *,
subselect ?,
cache ?,
同步*,
评论,
键,
(index | list-index),
(元素|一对多|多对多|复合
loader,sql-insert?,sql-update?,sql-delete?,sql-delete-all?,
filter *
) >

你可以看到,list元素需要index或list-index元素,一个关键要素,以及以下其中一项:


  • 元素
  • 一对多

  • 多对多

  • 组合元素

  • 多对多



  • 这里是列表索引DOCTYPE

     < ;! - 声明集合索引(数组或列表索引或映射键)的类型和列映射。 - > 

    <!ELEMENT list-index(column?)>
    <!ATTLIST list-index列CDATA#IMPLIED>
    <!ATTLIST list-index base CDATA0>

    所以你应该使用

     < list name =columns> 
    < key column =template_idnot-null =true/>
    < list-index column =哪一列应该用作索引/>
    <一对多课程=SpreadsheetImportTemplateColumn/>
    < / list>

    但是如果您想使用列表而不是集合,并且没有列表 - 索引列,您可以改用袋子。初始化如下

     集合< SpreadsheetImportTemplateColumn> columns = new ArrayList< SpreadsheetImportTemplateColumn>(); 

    定义这个映射而不是

     < bag name =columns> 
    < key column =template_idnot-null =true/>
    <一对多课程=SpreadsheetImportTemplateColumn/>
    < / bag>


    Sorry to bother - perhaps this is a very simple question - but for some reason the version below fails to get parsed, whereas the version with set works fine. In fact, if I just take the set version and replace set with list I get:

    nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from invalid mapping

    Thank you Misha

        <!-- 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>
    

    解决方案

    You said

    whereas the version with set works fine

    Here goes list 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*
    )>
    

    Ass you can see, list element needs either index or list-index element, a key element, and one of the following

    • element
    • one-to-many
    • many-to-many
    • composite-element
    • many-to-any

    Here goes list-index 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">
    

    So you should use

    <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>
    

    But if you want to use a list instead of a set and does not have a list-index column, you can use a bag instead. Initialize as follows

    Collection<SpreadsheetImportTemplateColumn> columns = new ArrayList<SpreadsheetImportTemplateColumn>();
    

    And define this mapping instead

    <bag name="columns">
         <key column="template_id" not-null="true"/>
         <one-to-many class="SpreadsheetImportTemplateColumn"/>
    </bag>
    

    这篇关于休眠一对多的映射工作与列表,但不是一组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆