Запрос наследования одной таблицы - PullRequest
0 голосов
/ 12 августа 2011

У меня есть существующая таблица для TransactionLogs, которая связана либо с External, либо с InternalType. идентификаторы, соответствующие денежной корректировке и игровой транзакции, хранятся в одном столбце с именем идентификатор транзакции , а в отдельном столбце с именем тип указывается, с какой таблицей она связана

Из-за природы существующей таблицы я отобразил ее в виде наследования одной таблицы:

@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "TYPE", discriminatorType = DiscriminatorType.INTEGER)
public class TransLog implements Serializable {
    @Id
    @GeneratedValue
    private Long id;
    private Integer type;
// getters and setters
}


@Entity
public class InternalAdjustmentTransLog extends TransLog {
    @ManyToOne
    @JoinColumn(name = "TransID", nullable = false)
    private InternalAdjustmentRecord internalAdjustmentRecord;
    // getters and setters
}

@Entity
public class ExternalTransLog extends TransLog {
    @ManyToOne
    @JoinColumn(name = "TransID", nullable = false)
    private ExternalAdjustmentRecord externalAdjustmentRecord;
}

каждый из этих двух подклассов имеет свои подклассы с определенными значениями дескриптора.

С приведенной выше настройкой есть случаи, когда мне нужно получить унифицированные данные обоих внутренние и внешние записи. Каков наилучший способ сделать это? Сначала я подумал, что будет достаточно использовать TransLog в качестве корневого класса для запроса (я использую критерии jpa). тем не менее, мне нужно получить TransId (который определен в подклассах и указывает на 2 разных объекта, не имеющих отношения).

Спасибо.

1 Ответ

0 голосов
/ 12 августа 2011

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

...