[TIL]5月6日
チームとN:1の関係でゲームをしようと思っていたのですが、プランを立てていたら失敗してしまいました.またmapping tableを作って、やってみて、やってみたが、成功しなかったので、game tableを置いて、teamと関係を築かなかった.ゲームのコラムにはteamのidがありますが、関係を設定していないので、変に見えますが、これ以上の方法は考えられません.
レコードのクエリー、参照メンバーのレコード?メンバー参照レコード?
{
"teamId": 1,
"records": [
{
"name": "나지완",
"position": "타자",
"atBat": 3,
"hit": 1,
"out": 1,
"average": 3.0
},
{
"name": "김유신",
"position": "타자",
"atBat": 3,
"hit": 1,
"out": 1,
"average": 3.0
}
]
}
前述したようにrecordをクエリすると,APIには当然memberのnameが含まれる.ただし、Recordドメインクラスにmemberのnameがフィールドとして存在する場合は、設計上memberにrecordを参照させるべきですが、これはちょっと気まずいです.メンバーがレコードを参照すると、モードはこうなります.create table member
(
id int primary key auto_increment,
name varchar(45),
position varchar(45),
team int references team (id),
record int references record (id)
);
create table record
(
id int primary key auto_increment,
at_bat int,
hit int,
`out` int,
average double
);
recordがid値を持つのは違和感があり,recordがmemberを参照する方向が正しいと考えられる.ずっとこの部分を混同していますが、レコード会社のIDがあるのは好きではありません.そこで、下記のように変更しました.
create table member
(
id int primary key auto_increment,
name varchar(45),
position varchar(45),
team int references team (id)
);
create table record
(
at_bat int,
hit int,
`out` int,
average double,
member int references member (id)
);
レコードが参照メンバーに変更されました.したがって、上のJSON形式のようにnameを含めるにはjoinを使用する必要がある場合があります.
public interface TeamRepository extends CrudRepository<Team, Long> {
@Query("select at_bat, hit, `out`, average, name, position from record left join member
on record.member = id where id = :id")
Optional<RecordMember> findRecordByMemberId(Long id);
}
上記のメソッドを宣言し、joinクエリー文を作成し、RecordMemberというクラスを作成します.このように私が望むようによく撮れました.
今日やったこと
Todo
明日、明日
Reference
この問題について([TIL]5月6日), 我々は、より多くの情報をここで見つけました https://velog.io/@yeon/TIL-5월-6일テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol