๐ง ์ฌ๋ฌ ์ปฌ๋ผ์ ๋ํ UNIQUE ์ ์ฝ์กฐ๊ฑด ์ค์ ํ๊ธฐ
@Table์ uniqueConstraints ์์ฑ์ ์ฌ์ฉํ์ฌ ์ค์ ํ ์ ์์ต๋๋ค.
์ฌ์ฉ ์์
@Table(
name="ํ
์ด๋ธ ์ด๋ฆ",
uniqueConstraints={
@UniqueConstraint(
name = "unique ์ ์ฝ์กฐ๊ฑด ์ด๋ฆ",
columnNames = {
"ํฌํจํ ์ปฌ๋ผ์ด๋ฆ 1",
"ํฌํจํ ์ปฌ๋ผ์ด๋ฆ 2"
}
),
}
columnNames๋ ํ๋๊ฐ ์๋ ์ปฌ๋ผ๋ช ๊ณผ ์ผ์นํด์ผ ํฉ๋๋ค.
@Table(
uniqueConstraints={
@UniqueConstraint( columnNames={"column1"})
}
)
@Table(
uniqueConstraints = {
@UniqueConstraint(name = "UniqueNumberAndStatus", columnNames = {"personNumber", "isActive"}),
@UniqueConstraint(name = "UniqueSecurityAndDepartment", columnNames = {"securityNumber", "departmentCode"})
}
)
๐ง ์ฐธ๊ณ : uniqueConstrains ์ ๋ํด์
@Table์ uniqueConstrains์ ๋๋ถ์ด, @Column์ unique, length ๋ฑ์ ์ ์ฝ์กฐ๊ฑด์ ์ถ๊ฐํด์ฃผ๋ ์์ฑ๋ค์ด ์์ต๋๋ค.
ํด๋น ์์ฑ๋ค์ ๋จ์ง DDL์ ์๋์ผ๋ก ์์ฑํ ๋๋ง ์ฌ์ฉ๋๊ณ , JPA์ ์คํ ๋ก์ง์๋ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์คํค๋ง ์๋ ์์ฑ ๊ธฐ๋ฅ('spring.jpa.hibernate.ddl-auto=create' ๋ฑ)์ ์ฌ์ฉํ์ง ์๊ณ ์ง์ DDL์ ๋ง๋ ๋ค๋ฉด ํด๋น ๊ธฐ๋ฅ๋ค์ ์ฌ์ฉํ ์ด์ ๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ํด๋น ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๊ฐ ์ํฐํฐ๋ง ๋ณด๊ณ ๋ ์์ฝ๊ฒ ๋ค์ํ ์ ์ฝ์กฐ๊ฑด์ ํ์ ํ ์ ์๋ค๋ ์ฅ์ ์ด ์์ต๋๋ค.
๐ง Embbeded Class์ ๊ฒฝ์ฐ
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
@Table(name = "oauth_member",
uniqueConstraints = {
@UniqueConstraint(
name = "oauth_id_unique",
columnNames = {
"oauth_server_id",
"oauth_server"
}
),
}
)
public class OauthMember extends BaseEntity {
@Embedded
private OauthId oauthId;
private String nickname;
private String profileImagePath;
public OauthId oauthId() {
return oauthId;
}
public String nickname() {
return nickname;
}
public String profileImagePath() {
return profileImagePath;
}
}
@Embeddable
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
public class OauthId {
private String oauthServerId;
@Enumerated(STRING)
private OauthServer oauthServer;
public String oauthServerId() {
return oauthServerId;
}
public OauthServer oauthServer() {
return oauthServer;
}
}
์์ ๊ฐ์ ์ฝ๋๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ฐ์, ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ @Embeddable ํด๋์ค์ @Column ์ ๋ํ ์ด์ ์ ์ฌ์ฉํ๊ฑฐ๋, @UniqueConstraint์ columnNames์ ์นด๋ฉ์ผ์ด์ค๋ก ์์ฑํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค.
์ฒซ๋ฒ์งธ ์์๋ง ์ดํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@Entity
@Builder
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
@Table(name = "oauth_member",
uniqueConstraints = {
@UniqueConstraint(
name = "oauth_id_unique",
columnNames = {
"oauth_server_id",
"oauth_server"
}
),
}
)
public class OauthMember extends BaseEntity {
@Embedded
private OauthId oauthId;
private String nickname;
private String profileImagePath;
public OauthId oauthId() {
return oauthId;
}
public String nickname() {
return nickname;
}
public String profileImagePath() {
return profileImagePath;
}
}
@Embeddable
@AllArgsConstructor
@NoArgsConstructor(access = PROTECTED)
public class OauthId {
@Column(nullable = false, name = "oauth_server_id")
private String oauthServerId;
@Enumerated(STRING)
@Column(nullable = false, name = "oauth_server")
private OauthServer oauthServer;
public String oauthServerId() {
return oauthServerId;
}
public OauthServer oauthServer() {
return oauthServer;
}
}