LoginSignup
3
0

More than 5 years have passed since last update.

Entity関連

  • @ OneToMany
  • @ ManyToOne

この辺りが混乱したし、うまくいかないことが多々あった。

OneToManyとは

Entityの1対多の関係のこと。

例)一人のユーザーが、何かを5件予約したとする。
DB上では、userテーブルとshceduleテーブルに分かれているものとして、
1ユーザーに対して、5件の予約が入っている。
この状態が1対多の関係である。

userテーブルのPKとscheduleテーブルのFKをくっつける感じ。
実際使ってみると、いちいちSQL発行しなくて済むので、ラクだと感じた。

User.java
@Entity
@Table(name="member")
@Data
@NoArgsConstructor
@AllArgsConstructor
@NotNull
public class User implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;   これがPK(Primary Key)
    .............
    @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER,orphanRemoval=true)
    @JoinColumn(name="user_id")
    @OrderBy("date")
    private List<Schedule> scheduleList;
}

ManyToOneとは

OneToManyの逆ですね。。。

上の例で言えば、予約1件1件に対して、誰が予約しているのかという情報を持つことになる。

Schedule.java
@Entity
@Table(name="schedule")
@Data
@NoArgsConstructor
@AllArgsConstructor
@NotNull
public class Schedule implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @Column(name="user_id")
    private int userId;  ←これがFK(Foreign Key)
    private String date;
    private String time;
    ............
    @ManyToOne
    @JoinColumn(name="user_id",nullable = false,insertable=false, updatable=false)
    private User user;
}

まとめ

今後もっと詳しく書いていこうと思うが、一旦はこんな感じで。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0