2017-06-17 53 views
1

我正在爲這所大學的電影數據庫項目工作,我需要創建一個基於java的網站來在一個巨大的postgresql數據庫中進行高級搜索。我沒有使用休眠或類似的工具。以下是數據庫的ER圖的一部分:

enter image description here基本的Java MVC:具有屬性的豆子和關聯實體

正如您所看到的,關聯實體actormovie鏈接實體actor和movie,同時列出描述的字符。我創建了兩個簡單的Bean,Actor和Movie,它們具有屬性,getter和setter。

這是我第一個關注MVC的java web項目,所以我不僅僅有點迷失方向。我的問題是:我應該創建一個映射關聯表的bean嗎?如果不是,我該如何處理as_character屬性?

回答

1

答案是肯定的。
這是因爲Actor-> Movie的關係有一個屬性as_character,你也可以找到一種不做類的方法,但是很長一段時間它會導致問題(也許是因爲你忘記了它而創建的一些愚蠢的bug,或者某人否則不知道它,你不想處理的東西)。
如果這是您的第一個方法,我認爲可以讓您感到困惑的是如何表達關係。
是進來首先想到的辦法,大部分時間,是有一個ActorMovie類,如:

public class ActorMovie { 
    Integer actor_id; 
    Integer movieid; 
    String as_character; 

    //getters, setters, equals, hashCode, toString 
} 

但你也可以把它作爲一個Actor(或Movie和有它喜歡:

public class ActorMovie { 
    Integer movieid; 
    String as_character; 

    //getters, setters, equals, hashCode, toString 
} 

Actor類:

public class Actor { 
    Integer actor_id; 
    String name; 
    String sex; 
    Set<ActorMovie> movies; 

    //getters, setters, equals, hashCode, toString 
} 

他們都解決了這些問題,他們只是改變你將如何通過代碼與這些數據進行交互,以瞭解何時更好地使用這兩種數據,你必須嘗試兩種方法並查看哪些變化,所以選擇你感覺更多的東西「自然」並看到結果。

+0

對我有意義。不知怎的,有這樣的事情而不是引用id是錯的嗎? '公開課演員電影{ 演員演員; 電影電影; String as_character; // getters,setters,equals,hashCode,toString }' – Panque

+0

好吧,我喜歡它。謝謝。 – Panque

+0

是的,它也可以是一個解決方案!如果你使用'Movie',那麼改變是因爲有權訪問'ActorMovie'的人可以調用電影的設置者,所以你可以加載一個ActorMovie,然後你可以做一些像'actorMovie.getMovie()。setName (「別的東西」)'。您在選擇使用什麼時需要考慮它(爲了更好地解釋關於總體設計模式的一些搜索) – rascio

1

不,你不需要。類Actor將有一個Movie的列表,而Movie類是Actor的列表。就像這樣映射。

對於字符屬性,您可以在Actor類中創建映射,其中鍵是影片,值是字符(或者是字符列表,因爲演員可以有多個字符電影):

Map<Movie, List<String>> characters = new HashMap<>()

+0

「as_character」屬性如何? – Panque

+0

查看編輯答案 – BrunoDM

+0

這是一個優雅的解決方案,我認爲與我接受的解決方案相比,我會一直處理來自兩個實體的數據更難。謝謝你的回覆,我肯定了解了一兩件事情。 – Panque

1

這取決於您的項目將如何發展。如果您不使用對象關係映射(如您在問題中所述),則應該爲關聯表創建Bean映射。如果稍後將介紹Object Relational Mapping,那麼Actor可以擁有as_character屬性,那麼不應該爲關聯表創建bean映射。

相關問題