๐[Spring] JPA์ ์ด๋
ธํ
์ด์
- @JoinColumn
-
@JoinColumn
์ JPA์์ ๋ ์ํฐํฐ ๊ฐ์ ์ฐ๊ด๊ด๊ณ๋ฅผ ๋งคํํ ๋ ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ ์ค์ ํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ์ด๋ ธํ ์ด์ ์ ๋๋ค. -
@JoinColumn
์ ๊ด๊ณ๊ฐ ์ค์ ๋๋ ํ ์ด๋ธ์ ์ธ๋ ํค(Foreign Key)๋ฅผ ์ ์ํ๊ณ , ํด๋น ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ด ์ฐ๊ด๋ ์ํฐํฐ๋ฅผ ์ฐธ์กฐํ๊ฒ ํฉ๋๋ค.
1๏ธโฃ @JoinColumn
์ ์ฃผ์ ์์ฑ.
-
name
- ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
- ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐํ๋ ์ํฐํฐ์ ํ๋๋ช ๋๋ ํ๋กํผํฐ๋ช + _id ํ์์ผ๋ก ์ด๋ฆ์ด ์ค์ ๋ฉ๋๋ค.
- ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
-
referencedColumnName
- ์ธ๋ ํค(Foreign Key)๊ฐ ์ฐธ์กฐํ ๋์ ์ํฐํฐ์ ์ปฌ๋ผ๋ช
์ ์ง์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐธ์กฐ ์ํฐํฐ์ ๊ธฐ๋ณธ ํค๊ฐ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ธ๋ ํค(Foreign Key)๊ฐ ์ฐธ์กฐํ ๋์ ์ํฐํฐ์ ์ปฌ๋ผ๋ช
์ ์ง์ ํฉ๋๋ค.
-
nullable
- ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ด NULL์ ํ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ true์ด๋ฉฐ, false๋ก ์ค์ ํ๋ฉด ๋ฐ๋์ ๊ฐ์ด ์์ด์ผ ํฉ๋๋ค.
- ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ด NULL์ ํ์ฉํ ์ง ์ฌ๋ถ๋ฅผ ์ง์ ํฉ๋๋ค.
-
unique
- ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ด ์ ์ผํ ๊ฐ์ธ์ง ์ค์ ํฉ๋๋ค.
- ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค.
- ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ด ์ ์ผํ ๊ฐ์ธ์ง ์ค์ ํฉ๋๋ค.
-
insertable, updatable
- ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ ๊ฐ์ด ์ฝ์ /์ ๋ฐ์ดํธ ๊ฐ๋ฅํ์ง ์ค์ ํฉ๋๋ค.
2๏ธโฃ @JoinColumn
์์.
-
ํ(Team)๊ณผ ํ์(User)๊ฐ์ ๋ค๋์ผ(N:1) ๊ด๊ณ์์ User ์ํฐํฐ์ team ํ๋๋ฅผ ํตํด Team ์ํฐํฐ์์ ๊ด๊ณ๋ฅผ ์ค์ ํ๋ฉฐ,
@JoinColumn
์ ์ฌ์ฉํด ์ธ๋ ํค(Foreign Key)๋ฅผ ๋งคํํ ์ ์์ต๋๋ค.
```java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;private String name;
@ManyToOne
@JoinColumn(name = โteam_idโ) // ์ธ๋ ํค ์ปฌ๋ผ ์ค์
private Team team;// getter, setter
}
@Entity
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
// getter, setter } ```
๐ ์ค๋ช .
- User ์ํฐํฐ์์ team ํ๋๋
@ManyToOne
๊ด๊ณ๋ฅผ ํตํด Team ์ํฐํฐ์ ์ฐ๊ฒฐ๋ฉ๋๋ค. -
@JoinColumn(name = "team_id")
๋ฅผ ์ฌ์ฉํ์ฌ User ํ ์ด๋ธ์ team_id๋ผ๋ ์ธ๋ ํค(Foreign Key) ์ปฌ๋ผ์ด ์์ฑ๋๋๋ก ์ง์ ํ์ต๋๋ค.- ์ด ์ปฌ๋ผ์ Team ์ํฐํฐ์ ๊ธฐ๋ณธ ํค id๋ฅผ ์ฐธ์กฐํ๊ฒ ๋ฉ๋๋ค.
3๏ธโฃ @JoinColumn
์ ์ฌ์ฉํ ์๋ฐฉํฅ ๊ด๊ณ ์์.
-
@JoinColumn
์ ์๋ฐฉํฅ ๊ด๊ณ์์๋ ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.- ์๋ฅผ ๋ค์ด, User์ Team ์ํฐํฐ๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ์๋ฐฉํฅ ๊ด๊ณ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
```java
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@ManyToOne
@JoinColumn(name = โteam_idโ)
private Team team;
} - ์๋ฅผ ๋ค์ด, User์ Team ์ํฐํฐ๊ฐ ์๋ก๋ฅผ ์ฐธ์กฐํ๋ ์๋ฐฉํฅ ๊ด๊ณ๋ก ์ค์ ํ ์ ์์ต๋๋ค.
@Entity
public class Team {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
@OneToMany(mappedBy = "team") // ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ด ์๋์ ๋ช
์
private List<User> users = new ArrayList<>();
// getter, setter } ```
๐ ์ค๋ช .
- User ์ํฐํฐ๋ team_id ์ปฌ๋ผ์ ํตํด Team ์ํฐํฐ์ ์ฐ๊ฒฐ๋๋ฉฐ, ์ด ์ธ๋ ํค(Foreign Key)๊ฐ ๊ด๊ณ์ ์ฃผ์ธ์ด ๋ฉ๋๋ค.
- Team ์ํฐํฐ๋ users ํ๋๋ฅผ ํตํด User ์ํฐํฐ๋ฅผ ์ฐธ์กฐํ๋ฉฐ, mappedBy ์์ฑ์ ํตํด ์ฐ๊ด๊ด๊ณ ์ฃผ์ธ์ด ์๋์ ๋ช ์ํ์ต๋๋ค.
4๏ธโฃ ์์ฝ.
-
@JoinColumn
์ ๋ ์ํฐํฐ ๊ฐ์ ๊ด๊ณ์์ ์ธ๋ ํค๋ฅผ ์ค์ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ์ธ๋ ํค ์ปฌ๋ผ์ ์ด๋ฆ๊ณผ ์์ฑ์ ์ง์ ํ ์ ์์ต๋๋ค. - ๋จ๋ฐฉํฅ, ์๋ฐฉํฅ ๊ด๊ณ์์ ๋ชจ๋ ์ฌ์ฉ๋๋ฉฐ, ๋ช ํํ ์ธ๋ ํค ์ค์ ์ ํตํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํฉ๋๋ค.
- name. nullable, unique ๋ฑ ๋ค์ํ ์์ฑ์ ์ค์ ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ปฌ๋ผ์ ์ ์ฝ ์กฐ๊ฑด์ ์กฐ์ ํ ์ ์์ต๋๋ค.