Как я могу отобразить этот полиморфизм в Hibernate, используя XML, без создания дополнительных родительских таблиц? - PullRequest
1 голос
/ 23 декабря 2010

Я пытаюсь отобразить дерево POJO в Hibernate, чтобы я мог (а) кратко использовать UUID для первичных ключей повсюду и (б) внешне навязывать набороподобные отношения между иначе не связанными таблицами.Кажется, это прекрасно работает с использованием аннотаций, но я не могу заставить его работать так же, как с помощью отображения HBM XML.

Например, учитывая следующие (сокращенно) классы:

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Unique {
    private String uuid;
}

@Entity
public class Relationship extends Unique {
    @OneToMany
    private Set<Unique> members;
}

@Entity
public class Activity extends Unique {
    private String name;
}

@Entity
public class AssociatedXML extends Unique {
    @Lob
    private String xml;
}

... легко, peasy.Когда я запускаю hbm2ddl, он создает таблицы Relationship, Relationship_Unique, Activity и AssociatedXML.Запросы, подобные следующему HQL, выглядят великолепно:

session.createQuery("select xml "
    + "from AssociatedXML as xml, Relationship as rel "
    + "left join rel.members as m "
    + "where m.uuid = :uuid").setString("uuid", activity.getUuid());

Тем временем я пытаюсь перейти к настройке XML.POJO генерируются из схемы XML.Так как источник генерируется, я стараюсь избегать ручного редактирования, чтобы добавить аннотации.

Я перепробовал каждую конфигурацию XML, которую только могу придумать (а также дурачиться с выводом <hbm2hbmxml/> вСпящие инструменты).Я не могу придумать конфигурацию, которая не или не создает дополнительную Unique родительскую таблицу, включающую дополнительное соединение, или не удается в фабрике сеанса с ошибкой:

Ассоциация ссылается на не отображенный класс: Уникальный

У кого-нибудь есть предложения относительно того, как должны выглядеть мои файлы конфигурации XML?Или я иду по плохому пути?

1 Ответ

1 голос
/ 23 декабря 2010

Это примерно так:

<class name="Unique" abstract = "true">
    <id name="uuid" />

    <union-subclass name="Relationship">
        <set name="members" table = "Relationship_Unique" >
            <key />
            <many-to-many class = "Unique" unique="true"/>
        </set>
    </union-subclass>

    <union-subclass name="Activity">
        <property name = "name" />
    </union-subclass>

    <union-subclass name="AssociaXML">
        <property name = "xml" />
    </union-subclass>
</class>

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...