
Unique ์ ์ฝ ์กฐ๊ฑด์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ์ ์งํฌ ์ ์๊ฒ ๋์์ค๋ค.
๋๋ ์ด์ ๊น์ง๋ @Column(unique = true)๋ฅผ ํ๋๋ค์ ์ง์ ์ฃผ์ด ์ค์ ํด ์์๋๋ฐ ์ต๊ทผ ์๋ก์ด unique ์ ์ฉ ๋ฐฉ๋ฒ์ ์๊ฒ๋์๋ค.
์ด๋ฒ ๊ธ์์๋ ์ด ๋ ๊ฐ์ง ๋ฐฉ๋ฒ์ ๋น๊ตํ๊ณ , ์ค๋ฌด์์๋ ์ด๋ค ๋ฐฉ์์ด ๋ ๋์์ง ๊ทธ ์ด์ ๊น์ง ์ ๋ฆฌํด๋ณผ๊ฒ์.
@Entity
@Table(
name = "member",
uniqueConstraints = {
@UniqueConstraint(columnNames = {"email"}),
@UniqueConstraint(columnNames = {"username"}),
@UniqueConstraint(columnNames = {"provider", "provider_id"}) // ์์
๋ก๊ทธ์ธ์ฉ ๋ณตํฉ UNIQUE ์์
}
)
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String email;
private String username;
}
โ ํ
์ด๋ธ ๋ ๋ฒจ์์ Unique ์ ์ฉ
โ DDL ์์ฑ ์ ALTER TABLE ์์ค์์ UNIQUE KEY ์์ฑ
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(unique = true)
private String email;
@Column(unique = true)
private String username;
}
โ ์ปฌ๋ผ ๋จ์์์ Unique ์ ์ฉ
โ DDL ์์ฑ ์ ํด๋น ์ปฌ๋ผ ๋ค์ UNIQUE ์ต์
์ถ๊ฐ
| ๋น๊ต ํญ๋ชฉ (์ฐจ์ด์ ์ ์ค์ฌ์ผ๋ก ) | @Table(uniqueConstraints) | @Column(unique = true) |
|---|---|---|
| ์ ์ฉ ์์น | ํ ์ด๋ธ ๋ ๋ฒจ | ์ปฌ๋ผ ๋ ๋ฒจ |
| ๋ณตํฉ UNIQUE ์ง์ ์ฌ๋ถ | ๊ฐ๋ฅ (columnNames = {"col1", "col2"}) | ๋ถ๊ฐ๋ฅ (๋จ์ผ ์ปฌ๋ผ๋ง) |
| DDL ์์ฑ ๊ฒฐ๊ณผ ํ์ | ๋ณ๋ ALTER TABLE or CONSTRAINT ์์ฑ | ์ปฌ๋ผ ์ ์ ๋ค์ UNIQUE ์ถ๊ฐ |
| DDL ๊ด๋ฆฌ ํด๊ณผ์ ํธํ์ฑ | ๋ ๋ช ํํ๊ฒ ๊ด๋ฆฌ๋จ | ์ปฌ๋ผ ์ ์ฝ์ผ๋ก ๋์ค๋ฏ๋ก ๋ ๋ช ํํ ์ ์์ |
| JPA ํ์ค ์ค์ ์ฌ๋ถ | JPA ํ์ค ์ด๋ ธํ ์ด์ | Hibernate ๊ตฌํ์ฒด ํนํ ์ฑ๊ฒฉ ๊ฐํจ (@Column(unique=true)๋ JPA ํ์ค์ด ์๋ โ Hibernate ํ์ฅ ๊ธฐ๋ฅ์) |
| ์ค๋ฌด ์ฌ์ฉ ๊ถ์ฅ ์ฌ๋ถ | ๐ ๋ง์ด ์ฌ์ฉ | โ ๏ธ ์ ์ฐ์ง ์์ (ํ ์คํธ/๊ฐ๋จํ ๊ฒฝ์ฐ๋ง) |
๋๋ถ๋ถ ์๋น์ค๋ ๋ณตํฉ unique๊ฐ ํ์ํ ๊ฒฝ์ฐ๊ฐ ๋ง์ (ex: (user_id, email) ๊ฐ์ด)
@Table(uniqueConstraints) ๋ ๋ณตํฉํค๊น์ง ์์ฐ์ค๋ฝ๊ฒ ์ง์
@Column(unique=true) ๋ ๋จ์ผ ํ๋๋ง ๊ฐ๋ฅ โ ํ์ฅ์ฑ ๋ฎ์
@Table(uniqueConstraints) ๋ JPA ํ์ค โ ๋ชจ๋ JPA ๊ตฌํ์ฒด์์ ์ง์
๋ฐ๋ฉด @Column(unique = true) ๋ Hibernate์์๋ง ํ์ฅ์ ์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅ
โ ๋ค๋ฅธ ๊ตฌํ์ฒด๋ก ๊ฐ ๊ฒฝ์ฐ ๊นจ์ง ์ ์์
@Table(uniqueConstraints) ๋ DDL์ด ๋ช ํํ๊ฒ constraint ๋ ๋ฒจ๋ก ์์ฑ๋จ
ALTER TABLE ADD CONSTRAINT UNIQUE (email)
@Column(unique=true) ๋ ์ปฌ๋ผ ์ ์์ UNIQUE ๋ถ์ด๋ ์ ๋๋ผ
โ DDL ํด/DBA๊ฐ ๊ด๋ฆฌํ ๋ ๊ฐ๋
์ฑ์ด ๋จ์ด์ง
๋ง์ ํ์์ @Column(unique = true) ๋ฅผ ์ผ๋ค๊ฐ
โ ๋ณตํฉ unique ํ์ํ๊ฑฐ๋ โ DDL ํด๊ณผ ์ถฉ๋ํ๋ฉด์ โ ์ ๋ถ @Table(uniqueConstraints)๋ก ๋ณ๊ฒฝํ ์ผ์ด์ค ๋ง์
| ์ํฉ | ์ถ์ฒ ๋ฐฉ์ | ์ด์ |
|---|---|---|
| ๋ณตํฉ Unique ํ์ํ ๊ฒฝ์ฐ | @Table(uniqueConstraints) | ์ ์ผํ ์ ํ์ง |
| ๋จ์ผ Unique๋ผ๋ ์ค๋ฌด ์ ์ฉ | @Table(uniqueConstraints) | ํ์ค์ , ๋ช ํ, ์ด์์ฑ ์ฐ์ |
| ๊ฐ๋จํ ํ ์คํธ/ํ๋กํ ํ์ | @Column(unique=true) | ๋น ๋ฅธ ํ ์คํธ์ฉ (์ด์ ๊ถ์ฅ X) |
๋๋๋ก ์ด์ ์ฝ๋์์๋ @Table(uniqueConstraints) ์ฌ์ฉ์ด ๋ ์์ ํ๊ณ ์ค๋ฌด์ ์ผ๋ก ํ์ค์ ์ด๋ค.
@Column(unique=true) ๋ ๋น ๋ฅธ ํ
์คํธ ์ฉ๋๋ก์๋ง ์ฌ์ฉํ์.