2015-11-06 1 views
1

У меня есть два объекта: «Курс» и «Человек».Включение ручной сортировки для объектов

1) одно или несколько лиц несут ответственность за курс

2) Курс может содержать другие курсы.

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

Это означает, что он должен быть в состоянии отображать курсы, как это:

Course 1: 
    Responsible Persons: 
    1. Person A 
    2. Person B 
    3. Person C 

Course 2: 
    Responsible Persons: 
    1. Person B 
    2. Person A 
    3. Person C 

И этот порядок может быть объявлен при создании курса. Но нет ничего похожего на ролевую концепцию для разных пользователей, которые используют приложение. Так сказать, будет только «один» пользователь и ничего не похоже на класс User.

Как вы можете видеть на диаграмме ниже. Я подумал о двух новых классах под названием «SortableCourse» и «SortablePerson», которые содержат дополнительный идентификатор для сортировки.

1) Это хороший подход?

2) Я буду использовать Java и Hibernate для OR-Mapping:

2.1) Должен ли я пропустить что-то, что может вызвать проблемы в дальнейшем с отображением/создания таблиц?

2.2) Не может быть проблемой, что у человека есть список курсов, но у курса есть список SortablePersons? Поскольку, по моему мнению, из представления базы данных достаточно иметь таблицу с идентификаторами курса и идентификаторами SortablePerson. Кто-нибудь есть опыт, как Hibernate будет «переводить» это?

Надеюсь, моя идея понятна, заблаговременно за любые подсказки!

Course class diagram

+0

Вам не хватает одного важного объекта на диаграмме: пользователь. При попытке моделировать, что вы заметите, атрибут 'consistOf' не имеет смысла. –

+0

Не могли бы вы объяснить немного подробнее? Атрибут 'consistOf' означает, что курс может (но не должен) иметь один или несколько« суб-курсов ». Куда должен войти пользователь? – bauz

+0

Вы имели в виду сортировать курсы и лиц _per user_? Это то, что я догадался из-за способности пользователя добавлять ручную сортировку. И в этом случае вам нужно будет сохранить последовательность для каждого пользователя. –

ответ

1

Вместо создания макета таблицы или UML диаграммы позволяет посмотреть, что JPA умеет делать:

@Entity 
public class Course { 
    ... 
    @OneToMany 
    @OrderColumn 
    private List<Person> responsiblePersons; 

    @OneToMany 
    @OrderColumn 
    private List<Course> consistsOf; 
} 

@Entity 
public class Person { 
    ... 
    @OneToMany(mappedBy = "responsiblePerson") 
    private List<Course> responsibleFor; 
} 

Важно это List с @OrderColumn декларацией, которая указывает, что отображение имеет стабильный порядок.

Это создаст четыре таблицы:

COURSE 
------ 
id, ... 

PERSON 
------ 
id, ... 

COURSE_PERSON 
------ 
course_id, responsiblePersons_id, responsiblePersons_order 

COURSE_COURSE 
------ 
course_id, consistsOf_id, consistsOf_order 

Так что не нужно придумывать какую-то «обертку» сущность.

+0

Где в коде вы указываете создать 'ответственныйPersons_order' и' consistOf_order'? – bauz

+0

Если вы используете интерфейс 'List' без аннотации OrderBy, инфраструктура JPA будет предполагать, что вы хотите сохранить заказ. В отличие от 'Set' или' Collection'. –

+0

Я реализовал его, как вы сказали выше, но не был создан столбец заказа. Тем не менее я мог бы добавить поведение с @OrderColumn Annotation. Но есть также две таблицы, которые создают COURSE_PERSON и PERSON_COURSE, что правильно в том, что существуют два разных порядка. Заказ курсов и заказы лиц курса. Но на данный момент заполняется только одна из таблиц (что тоже правильно, но было бы неплохо соединить оба, так что список курсов человека будет обновляться, когда этот человек будет добавлен в список лиц курс). – bauz

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

  • Нет связанных вопросов^_^