Hibernate другой тип карт Pojo - PullRequest
0 голосов
/ 02 сентября 2010

У меня проблема с отображением для этой структуры, которую я спроектировал

public abstract class A<T> {
 private int discriminator_value = -1;
 private T value;
 //...
}

public class One extends A<String> {

 public One(){
  setDiscriminatorValue(1);
 }
 //...
}

public class Two extends A<BigDecimal> {

 public Two(){
  setDiscriminatorValue(2);
 }
 //...
}

public class Three extends A<Date> {

 public Three(){
  setDiscriminatorValue(3);
 }
 //...
}


public class TheTargetSolution {
  private Long info1;
  private Long info2;
  private Long info3;
  private A targetPojo; 
 //...  
}

Структура таблицы

 THE_TARGET_SOLUTION_TABLE
  - INFO_1   NUMBER(10)
  - INFO_2   NUMBER(10)
  - INFO_3   NUMBER(10)
  - DISCRIM  NUMBER(2)
  - TEXT_A   NVARCHAR2(200 BYTE)
  - NUMBER_A NUMBER(10)
  - DATE_A   DATE

Главное, что нам нужноиметь в TheTargetSolution targetPojo, который является типом класса A, и этот класс не имеет сопоставления (нам нужно больше информации для сущности, и нет возможности сделать это, используя отношение многие ко многим, в этом случае все данные должны храниться водна таблица) это экземпляр типа, который применяется к дискриминатору.

Возобновление

Когда значение столбца DISCRIM равно 1, targetPojo должен иметь тип One

Когда значение столбца DISCRIM равно 2, targetPojo должентип Two

Когда значение столбца DISCRIM равно 3, targetPojo должен иметь тип Three

Есть предложения?

Ответы [ 2 ]

1 голос
/ 21 ноября 2012

Взгляните на это: https://github.com/candybon/fasttrack это решение, которое объединяет все pojo в одну таблицу

1 голос
/ 10 сентября 2010

Это типичный сценарий для наследования , с таблицей на класс иерархии. Если вы используете XML, см. Связанные документы. Если вы используете аннотации, используйте

@MappedSuperclass
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="DISCRIM", discriminatorType=INTEGER)
public abstract class A {
   // properties here
}

А потом

@Entity
@DiscriminatorValue("1")
public class Two extends A<BigDecimal>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...