Отображение нескольких классов в таблицу в Hibernate, без столбца DTYPE - PullRequest
10 голосов
/ 02 февраля 2011

У меня есть два спящих класса: базовый класс и расширенный класс с дополнительными полями. (Эти поля отображаются другими таблицами.)

Например, у меня есть:

@Entity
@Table(name="Book")
public class A {
    private String ID;
    private String Name;
    // ...
}

@Entity
@Table(name="Book")
public class B extends A {
    public String node_ID;
    // ...
}

public class Node {
    public String ID; // maps to B.node_ID
    // ...
}

Как мне отобразить это в Hibernate? Документация Hibernate содержит три типа конфигураций наследования: одна таблица на класс, одна таблица со столбцом типа и таблица соединения - ни одна из них здесь не применима.

Причина, по которой мне нужно это сделать, заключается в том, что класс A взят из универсальной среды, которая многократно используется в нескольких проектах, а класс B (и узел) являются расширениями, характерными для одного проекта - они больше не будут использоваться. В будущем, возможно, у меня будет класс C с house_ID или каким-либо другим полем.

Редактировать: Если я попробую описанную выше конфигурацию псевдокода (две сущности, сопоставленные с одной и той же таблицей), я получу ошибку, что столбец DTYPE не существует. К HQL добавлено "где DTYPE =" A ".

1 Ответ

11 голосов
/ 02 февраля 2011

Это возможно путем сопоставления @DiscriminatorColumn и @DiscriminatorValue одинаковым значениям для обоих классов;это может быть любой столбец, который вы используете, который имеет одинаковые данные независимо от того, какой тип (не уверен, работает ли он с нулевыми значениями).

Классы должны выглядеть так:

@Entity
@Table(name="Book")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="published")
@DiscriminatorValue(value="true")
public class A {
    private String ID;
    private String Name;
    // ...
}

@Entity
@Table(name="Book")
@DiscriminatorValue(value="true")
public class B extends A {
    public String node_ID;
    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...