简体   繁体   中英

How to deal with metadata in a Many-To-Many relationship with Spring Data JDBC?

I have a project, where bot_user s play in game_table s. So I have a join table. I also store the buy_in (points available to the player at the table) in that join table. My 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)
);

My question now is: how do I represent that buy_in metadata in entities in Java? If buy_in didn't exist, I would simply have a ParticipantRef of which I would have a Set in the GameTable entity, and then have methods that work on IDs there. But I want to have buy_in available in the code too, so should I create a ParticipantRef -like entity that contains the buy_in ? If yes, then how would persisting it work?

Your proposed solution is pretty much the way to do this. Instead of having a ParticipantRef with just the userId of the BotUsers it also gets a buyIn attribute.

Since you have an object references from GameTable via a Set to the ParticipantRef it will be considered part of the GameTable-Aggregate and get persisted whenever you persist a GameTable instance.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM