2015-11-06 35 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」的新類,它們包含用於排序的附加ID。

1)這是一個好方法嗎?

2)我會使用Java和Hibernate的OR-映射:

2.1)我錯過的東西,可能以後會導致問題的映射/創建的表?

2.2)這可能是一個問題,人有一個課程列表,但該課程有一個SortablePersons列表?因爲從我猜的數據庫視圖來看,只要有一個包含Course ID和SortablePerson ID的表就足夠了。有沒有人有經驗Hibernate將如何「翻譯」?

希望我的想法清楚了,謝謝任何提示!

Course class diagram

+0

您在圖表中缺少一個重要實體:用戶。當你嘗試建模時,你會注意到,'consistOf'屬性沒有任何意義。 –

+0

你能詳細解釋一下嗎? 'consistOf'屬性意味着一門課程可以(但不一定)有一個或多個「子課程」。用戶應該在哪裏進來? – bauz

+0

你的意思是把用戶的課程和人員排序嗎?這就是我從用戶添加手動排序序列的能力。在這種情況下,您將不得不爲每個用戶存儲序列。 –

回答

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

你在代碼中的哪個地方創建'responsiblePersons_order'和'consistOf_order'? – bauz

+0

如果您使用不帶'OrderBy'註釋的'List'接口,那麼JPA框架會猜測您想保存訂單。與「Set」或「Collection」不同。 –

+0

我按照上面的說明實現了它,但沒有創建訂單列。不過,我可以使用@OrderColumn Annotation添加行爲。但是也有兩個表創建了COURSE_PERSON和PERSON_COURSE,對於存在兩個不同的命令的方式是正確的。一個人的課程排序和課程人員的排序。但是目前只有一張桌子被填滿了(某種方式也是對的,但是將兩者連接起來會更好,這樣當人物被添加到人物列表中時,人物的列表就會變得更新一門課程)。 – bauz