Как использовать коллекции верхнего уровня в спящем режиме? - PullRequest
0 голосов
/ 05 декабря 2011

Я пытаюсь использовать концепцию Top Level Collections, описанную в этом сообщении:

Вот часть этого поста:

Коллекции верхнего уровня

Коллекция верхнего уровня - это коллекция, определенная вне области действия индивидуальный класс и доступен для использования во всех классах в картографические файлы. Сценарий

У нас есть один класс Foo и коллекция строк (например, people имена), которые мы хотим сделать доступными для других классов без постоянно объявлять наборы определений внутри каждого.

Set Foo.getNames() // of String instances

<set role="names" table="names">
    <key column="id" type="string">
        <generator class="uuid.hex"/>
    </key>
    <element column="name" type="string"/>
</set>
<class name="Foo" table="foo"> 
    ... 
    <collection name="names" column="name_id" role="names"/> 
</class>

Обратите внимание, что для коллекции верхнего уровня требуется собственный генератор ключей, и что это не может быть назначенного типа, так как он никогда не подвергается вызывающее приложение.

Опять же, Person не представляет класс. Это просто коллекция постоянных объектов второго ранга - в данном случае строки. Обратите внимание также эти имена просто имеют идентификатор, а не foo_id. Это позволяет использовать его Разнообразие классов. Кроме того, потому что мы не можем использовать идентификатор человека в качестве foo_id, мы добавили person_id FK в Foo. Двунаправленность

Здесь нет двунаправленной связи, так как есть только участвует один класс.

Когда я попытался использовать элемент <set> в отображении над элементом <class>, я начал получать ошибки. Я думаю, что hibernate не может определить <set> за пределами <class> элемента.

Кто-нибудь знает, как использовать Top Level Collections?

Пожалуйста, помогите!

1 Ответ

0 голосов
/ 05 декабря 2011

Этот шпаргалка очень старая, основанная на информации на веб-сайте, который больше не существует.

Я нашел обсуждение в 2002 году, в котором Гэвин Кинг обсуждает, чтобы больше не поддерживать его в hibernate 2: http://www.mail-archive.com/hibernate-devel@lists.sourceforge.net/msg01188.html

В hibernate-mapping-1.1.dtd, (доступно из http://www.jboss.org/dtd/hibernate/)верхние элементы:

<!ELEMENT hibernate-mapping ( 
    (map|set|list|bag|array|primitive-array)*, 
    class*,
    query*
)>

В hibernate-mapping-2.0.dtd это:

<!ELEMENT hibernate-mapping (
    meta*,
    import*, 
    (class|subclass|joined-subclass)*, 
    query*, 
    sql-query*
)>

В hibernate-mapping-3.0.dtd:

<!ELEMENT hibernate-mapping (
    meta*,
    identifier-generator*,
    typedef*,
    filter-def*,
    import*,
    (class|subclass|joined-subclass|union-subclass)*,
    resultset*,
    (query|sql-query)*,
    filter-def*,
    fetch-profile*,
    database-object*
)>

Коллекции верхнего уровня в спящем состоянии давно похоронены.

...