私はこれら2つのエンティティテーブルを1つのモデルクラス、ゲーム、プラットフォームにマップしようとしています。ゲームは複数のプラットフォームを持つことができます。テーブルは複数の列を持っているが、私はちょうどこれに関連しているものを示していますことをJPAマッピング2エンティティテーブルとそれらの間の関係テーブル
CREATE TABLE IF NOT EXISTS game_platforms (
id serial not null primary key,
game_id INTEGER NOT NULL,
platform_id INTEGER NOT NULL,
release_date date not null,
FOREIGN KEY (game_id) REFERENCES games (id) ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (platform_id) REFERENCES platforms (id) ON DELETE CASCADE ON UPDATE CASCADE,
UNIQUE(game_id,platform_id, release_date) --The same game can be released for the same platform multiple times (i.e. remaster)
);
注
CREATE TABLE IF NOT EXISTS games (
id SERIAL NOT NULL PRIMARY KEY,
name VARCHAR,
summary TEXT,
avg_score REAL,
);
CREATE TABLE IF NOT EXISTS platforms (
id SERIAL NOT NULL PRIMARY KEY,
name VARCHAR
);
そして、関係テーブルと呼ばれるGame_Platforms:だから私のデシベルに私は、次の表を持っています問題。
だから私のモデルに私はJPA
私はそれが必要で見つからなかったため、クラスを持っていない@Entity
@Table(name = "games")
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "games_gameid_seq")
private long id;
@Column(length = 100, nullable = false, unique = true)
private String name;
//Map with platforms
private Map<String, LocalDate> platforms;
そしてプラットフォームを使用してDBにマッピングする以下のクラスがあります。 @OneToManyアノテーションはこれをマップするのに十分ではないと私は考えています。 私のモデルにクラス "Platform"を追加することは、ほとんどの私のインターフェイスを変更する必要があるため、最後の手段になるでしょう、アプリ全体を変更する必要があります。どのようにこれをaproachする上の任意のアイデア?前もって感謝します!
技術的には、GamePlatformエンティティを追加することができます(これは実際にモデルの一部であり、作成することはありません)。次に、Mapオブジェクトを生成するメソッドを追加します。コードは動作し続けます。あなたはそれを非難することができ、時にはそれを1つのビッグバンではなくフェーズアウトすることができます。 –
Gimby
プラットフォームテーブルからID列を削除し、 '@ ElementCollection'を使用します。プラットフォームはエンティティとしてマッピングする必要はありません。マップを使用したソリューションについては、ここで詳しく説明します。 http://stackoverflow.com/questions/3393649/storing-a-mapstring-string-using-jpa –
あなたの2つの素晴らしい答えに感謝します!私はそれらをチェックアウトする! –