Таблица Hibernate в иерархии Как - PullRequest
1 голос
/ 06 июня 2009

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

Можно ли указать код из объединенной таблицы в качестве дискриминатора, или я должен использовать значения ключей и надеяться, что ключи остаются согласованными?

например. дискриминатор = "квадрат | круг" против Дискриминатор = "0 | 1"

стол: форма

area=25   shape_type_fk=0
area=10   shape_type_fk=1

таблица: shape_types

ID CODE
0  square
1  circle 

Ответы [ 2 ]

1 голос
/ 06 июня 2009

Быстрый тест показывает, что вы можете сделать это:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">

  <class name="Shape" abstract="true">
    <id name="id"/>
    <discriminator formula="select CODE from SHAPE_TYPES st where st.ID=SHAPE_TYPE"/>
    <version name="version"/>

    <subclass name="Square" discriminator-value="square"/>
    <subclass name="Circle" discriminator-value="circle"/>

  </class>
</hibernate-mapping>

Теперь это отображение не создаст таблицу SHARE_TYPE, на которую ссылается формула, а также не добавит столбец SHAPE_TYPE к таблице SHAPE. Это можно сделать в файле import.sql, который Hibernate считывает автоматически из пути к классам или сопоставляя другой класс с этой таблицей.

0 голосов
/ 06 июня 2009

Похоже, вам нужно использовать объединенный подкласс вместо подкласса. Подробности здесь .

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