ボットユーザーがゲームテーブルでプレイするプロジェクトがあります。したがって、結合テーブルがあります。また、buy_in (テーブルのプレイヤーが利用できるポイント) もその結合テーブルに保存します。私の SQL:
CREATE TABLE bot_users (
user_id bigint PRIMARY KEY,
free_points bigint CHECK (free_points >= 0),
frozen_points bigint CHECK (frozen_points >= 0)
);
CREATE TABLE game_tables (
channel_id bigint PRIMARY KEY,
owner bigint REFERENCES bot_users(user_id),
in_game boolean NOT NULL
);
CREATE TABLE game_tables_participants (
game_table_id bigint REFERENCES game_tables(channel_id),
participant_id bigint REFERENCES bot_users(user_id),
buy_in bigint NOT NULL,
PRIMARY KEY (game_table_id, participant_id)
);
私の質問は次のとおりです。Java のエンティティで buy_in メタデータをどのように表現すればよいでしょうか? buy_in が存在しない場合は、単純に ParticipantRef を用意し、その Set を GameTable エンティティに設定し、そこに ID を処理するメソッドを用意することになります。しかし、コード内でも buy_in を使用できるようにしたいので、buy_in を含む ParticipantRef のようなエンティティを作成する必要がありますか? 「はい」の場合、それを永続化するとどのように機能しますか?
通常、この投稿のように多対多の関係を 1 対多の 2 に分割します: codejava.net/frameworks/hibernate/…
– マルコ
2020 年 9 月 4 日 23:05
------------------------
あなたが提案したソリューションは、ほぼこれを実現する方法です。 BotUsers の userId のみを含む ParticipantRef を持つ代わりに、buyIn 属性も取得します。
ParticipantRef への Set を介して GameTable からオブジェクト参照があるため、それは GameTable-Aggregate の一部とみなされ、GameTable インスタンスを永続化するたびに永続化されます。