2010-09-02 5 views
0

У меня есть проблема с отображением для этой структуры, что я разработанHibernate POJO отображение другого типа

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 должен по типу Два

Когда DISCRIM значение столбца равно 3 целевому полю по типу 3

Любые предложения?

+0

вы используете XML, или аннотации? – Bozho

+0

Я использую XML-сопоставление –

ответ

1

Это типичный сценарий для inheritance с иерархией таблицы за класс. Если вы используете 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> 
+0

Да, и нет. Условие, что здесь возится, состоит в том, что класс A не может быть отображен и должен каким-то образом использоваться как компонент. Это потому, что данные, которые будут использоваться в A, образуют несколько таблиц (различный смысл их). И при использовании иерархии таблицы за класс мне придется перепроектировать всю логику в базе данных. –

+0

См. '@ MappedSuperclass'. Я не знаю xml equivallent, но это означает, что A не имеет таблицы serpate. Во всяком случае, я не могу видеть всю вашу базу данных, чтобы лучше судить. – Bozho

+0

Это может работать для аннотации нотации hibernate, но я не нашел эквивалента для XML, тем не менее это можно принять. Спасибо за ваше время и усилия. –

1

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

+0

Добро пожаловать в переполнение стека! Хотя это теоретически может ответить на вопрос, [было бы предпочтительнее] (http://meta.stackexchange.com/q/8259) включить основные части ответа здесь и предоставить ссылку для справки. – Emil

Смежные вопросы