Hibernate One для многих сопоставления работает со списком, но не набор?

StackOverflow https://stackoverflow.com/questions/3580686

Вопрос

Извините, что беспокоит - возможно, это очень простой вопрос - но по какой-то причине версия ниже не удается проанализировать, тогда как версия с набором работает нормально. На самом деле, если я просто сделаю набор версию и замените набор списком, я получаю:

Вложенное исключение является 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>
Это было полезно?

Решение

Ты сказал

тогда как версия с набором работает нормально

Здесь идет список dotype

<!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 из Hibernate Documentation.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top