2015-05-06 5 views
0

Вместо нескольких небольших объектов (которые имеют в основном такие же свойства, как ID и NAME), отображаемые как @OneToOne, я хотел бы иметь один «общий» вид объект, который сопоставляется с одной таблицей базы данных, и в этом случае должен ссылаться на какой-то столбец дискриминатора group_id.Используйте общий объект данных (и таблицу) для нескольких сопоставлений @OneToOne

Примеры кода должны понять, что я хочу добиться:

@Entity 
@Table(name = "GENERAL_DATA") 
public class GeneralData { 

    @Id 
    @Column(name = "GROUP_ID") 
    private int groupId; 

    @Id 
    @Column(name = "ID") 
    private int id; 

    @Column(name = "NAME") 
    private String name; 
} 

@Entity 
@Table(name = "INVOICE") 
public class Invoice { 

    @OneToOne 
    @JoinColumn(name = "STATUS") 
    private GeneralData status; 

    @OneToOne 
    @JoinColumn(name = "COLOR") 
    private GeneralData color; 
} 

Структура таблицы базы данных GeneralData должно быть так:

group_id id  name 
----------------------------- 
1   1  Active 
1   2  Processing 
1   3  Cancelled 
2   1  Blue 
2   2  Green 
2   3  Red 
+0

не получил ваш вопрос, что именно вы просите ..? – Dileep

ответ

0

Почему вы не избавиться GeneralData и использовать простые перечисления в объекте-фактуре? Если вы указали Statuses/Colors, это лучше.

@Entity 
@Table(name = "INVOICE") 
public class Invoice { 

    @Column(name = "STATUS") 
    private Status   status; 

    @Column(name = "COLOR") 
    private Color   color; 

} 

public enum Status { 
    ACTIVE, 
    PROCESSING, 
    CANCELLED 
} 

// ... 
+0

Я тоже придумал эту идею. Проблема, которую я видел, заключается в том, что имена являются постоянными при использовании перечисления (если я не использую сообщения из MessageSource с перечислением как ключ), я не могу сортировать с помощью SQL-средств, и я не могу добавить больше свойств (что можно было бы легко сделать с помощью GeneralData. – yglodt

+0

Хорошо, но ваше решение выглядит уродливо. Возможно, замена groupId на enum будет небольшой помощью. Но ваше решение, в результате чего вы можете легко ошибиться, ссылаясь на плохую GeneralData (с неправильным идентификатором группы), и вам понадобится больше обработки исключений. Более того, я не понимаю, зачем вам нужны статусы/цвета в базе данных. Как новые статусы будут добавлены в базу данных? Если вы дадите пользователю возможность, я бы предложил вам избавиться от общих данных и создать отдельный объектов для каждого параметра. PS Каков ваш реальный вопрос/проблема здесь? – tomasz77

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