2017-06-17 11 views
1

私は巨大なpostgresqlデータベースで高度な検索を行うためにjavaをベースにしたWebサイトを作成する必要がある大学向けのこのムービーdbプロジェクトで作業しています。私は休止状態のツールや類似のツールを使用していません。あなたが見ることができるようにも描かれた文字を一覧しながら、

enter image description here基本Java MVC:属性を持つBeansおよびAssociative Entity

、連想エンティティactormovieは、エンティティの俳優や映画をリンクします。ここでは、データベースのER図の一部です。私は、Actor、Getter、Setterの2つの単純なBean、ActorとMovieを作成しました。

これはMVCに焦点を当てた私の最初のJava Webプロジェクトですので、少し失われています。私の質問は:私は、結合テーブルをマッピングするBeanを作成する必要がありますか?もしそうでなければ、as_character属性で何をしますか?

答えて

1

答えはイエスです。
これは、Actor-> Movieの関係がas_characterのプロパティを持っているため、クラスを作成しない方法を見つけることもできますが、長い間問題が発生します(忘れたため、他にはそれを知らなかった、あなたが対処したくないもの)。
これがあなたの最初のアプローチであれば、私はあなたを混乱させることができるのは、その関係を表現する方法だと思います。
念頭に置いて来る最初のアプローチ、ほとんどの時間は、のような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を参照するのではなく、このようなことをどういう形にするのは間違っていますか? 'public class ActorMovie { 俳優; 映画ムービー; 文字列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マッピングを作成する必要があります。後でオブジェクト・リレーショナル・マッピングを導入する場合、アクタはas_characterプロパティを所有できます。次に、結合表のBeanマッピングを作成しないでください。

関連する問題