EclipseLink/JPA: несколько аннотаций @DiscriminatorColumn для Entity

Я ищу способ в EclipseLink иметь два @DiscriminatorColumns на одном и том же объекте.

Моя таблица БД PostreSQL:

Dictionary
{
  id,
  object_type,
  attribute_type,
  translation
}

И классы:

@Entity
@Table(name = "dictionary")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="object_type", 
                     discriminatorType=DiscriminatorType.INTEGER)
public class DictionaryRow implements Serializable;

@Entity
@DiscriminatorValue("0")
@DiscriminatorColumn(name="info_type", 
                     discriminatorType=DiscriminatorType.INTEGER)
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
public class DictionaryAttribute extends DictionaryRow;

@Entity
@DiscriminatorValue("1")
public class DictionaryAttributeName extends DictionaryAttribute;

Чего я пытаюсь добиться, так это того, что когда я вызываю DictionaryAttributeName, он будет разрешен для SQL, например:

select * from DICTIONARY where info_type = 1 and object_type = 0

Но на самом деле он берет DiscriminatorColumn из класса DictionaryRow и DiscriminatorValue из DictionaryAttributeName, что приводит к совершенно неправильному SQL:

select * from DICTIONARY where object_type = 1

Есть ли решение этой проблемы?

Спасибо


person Aleosha    schedule 14.10.2010    source источник


Ответы (1)


Согласно спецификации JPA 2.0 это невозможно:

11.1.10 Аннотация столбца дискриминатора

Для стратегии сопоставления SINGLE_TABLE, а также, как правило, для стратегии JOINED поставщик сохраняемости будет использовать столбец дискриминатора типов. Аннотация DiscriminatorColumn используется для определения столбца дискриминатора для стратегий сопоставления наследования SINGLE_TABLE и JOINED.

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

использованная литература

  • JPA 2.0 Specification
    • Section 11.1.10 "DiscriminatorColumn Annotation"
person Pascal Thivent    schedule 14.10.2010