2017-09-12 3 views
-1

に複数値フィールドを表現するために私はJPAの「作品」エンティティに「RELEASEDATE」フィールドを表現する方法を決定する問題を抱えています。たとえば、this movieとします。クラスフィールドは次のようになります。JPA - どのように実体

@Entity 
public class Movie { 
    private Long id; 
    private String name; 
    private Director director; 
    private List<Writer> writers; 
    private List<Actor> actors; 
    private List<ReleaseDate> releaseDates; 
} 

//@Entity ? 
class ReleaseDate { 
    private String northAmericanReleaseDate; 
    private String europeanReleaseDate; 
    private String asianReleaseDate; 
    // add more locations here 
} 

ムービーが複数のリリース日を持つことができる場合は、それらの表現方法がわかりません。上記は私がこれまでに持っていたものであり、ムービーがある場所で公開されていない場合はnullになり、その場所に公開されていないことを意味します。

大きな問題は、私は、私はそれはそれ自身のIDとテーブルの行を正当とは思わないようRELEASEDATEは、エンティティ/クラスであるべきとは思わないということです。ここで最善の戦略は何ですか?ありがとう。

+0

まず、 'Id'ではなく' id'を使うべきです。次に、shoulrはLocalDateを使用して文字列ではなく日付を表します。あなたの質問に関しては、Map 、またはSet を使用してください.LandReleaseDateはLocationとLocalDateを持つエンティティ(または埋め込み可能)です。 –

+0

[組み込み](https://stackoverflow.com/questions/21143707/what-is-difference-between-entity-and-embeddableは)私が後だおそらく何です。ありがとう。 –

答えて

0

私は、データモデルが正しくないと思う(そしてあなたの質問は、JPAとは何の関係もありません)。おそらく私は間違っていると思うかもしれませんが、リリース日は映画と大陸(ヨーロッパ、アメリカ、アジア)、または他の地理的場所とリンクしていると思いますか?その後、イベントReleaseは、映画、日付、場所、大陸、国などのメンバーを持つエンティティである必要があります。 (映画と場所は一意でなければなりません)。

それは彼らにヌルを持つ、1リリース日と場所ごとに1人のメンバーフィールドを持ってしても意味がありません。代わりに、場所は一般的なものでなければなりません。

+0

JPAとはテーブル内のエンティティをどのように表現するかということになります。 –

+0

はい、しかし、私は技術的には、データモデルのアーキテクチャは1つの問題であることを意味し、永続化の技術的解決策は別の問題です。ここでの問題は、JPAの技術的な問題ではなく、データモデルの設計方法に関する質問です。それから、ファイル、mongoDb、jdbc、またはJPAを介して永続化することができます。問題はありません。 – fairtrax

0
enum ReleaseLocation { 
    NorthAmerica, Europe, Asia; 
} 

class ReleaseDate { 
    private String releaseDate; 
    private ReleaseLocation releaseLocation; 
} 

このようなことはどうですか?

関連する問題