1

お手数をおかけして申し訳ありませんが、これは非常に単純な質問かもしれませんが、何らかの理由で以下のバージョンは解析に失敗しますが、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>
4

2 に答える 2

5

あなたが言った

一方、セット付きのバージョンは正常に動作します

ここにリスト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*
)>

ご覧のとおり、 list 要素には index または list-index element、キー要素、および次のいずれかが必要です

  • エレメント
  • 一対多
  • 多対多
  • 複合要素
  • 多対多

ここに 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">

だからあなたは使うべきです

<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 column がない場合は、代わりにバッグを使用できます。次のように初期化します

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

代わりにこのマッピングを定義します

<bag name="columns">
     <key column="template_id" not-null="true"/>
     <one-to-many class="SpreadsheetImportTemplateColumn"/>
</bag>
于 2010-08-27T02:01:12.533 に答える
0

Hibernate では、リストはインデックス列を指定する必要があります。

Hibernate のドキュメントのセクション 6.2.3 を参照してください。

于 2010-08-27T01:23:43.280 に答える