π[Spring] JPA μ΄λ
Έν
μ΄μ
- @Id
- JPA μ΄λ
Έν
μ΄μ
μ€
@Id
λ μν°ν°μ κΈ°λ³Έ ν€(Primary Key)λ₯Ό μ§μ νλ λ° μ¬μ©λλ μ΄λ Έν μ΄μ (Annotation)μ λλ€. - κΈ°λ³Έ ν€(Primary Key)λ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμμ κ° ν(Row)μ κ³ μ νκ² μλ³νλ λ° μ¬μ©λλ©°, λͺ¨λ JPA(Java Persistence API) μν°ν°λ λ°λμ νλμ νλλ₯Ό κΈ°λ³Έ ν€(Primary Key)λ‘ μ§μ ν΄μΌ ν©λλ€.
1οΈβ£ μ£Όμ νΉμ§.
1οΈβ£ κΈ°λ³Έ ν€(Primary Key) μ§μ .
-
@Id
μ΄λ Έν μ΄μ μ ν΅ν΄ μν°ν°μ νλλ μμ±μ κΈ°λ³Έ ν€(Primary Key)λ‘ μ§μ ν©λλ€. - κΈ°λ³Έ ν€(Primary Key)λ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμμ κ° ν(Row)μ κ³ μ νκ² μλ³νλ κ°μΌλ‘, κ° μν°ν° μΈμ€ν΄μ€λ₯Ό κ³ μ νκ² μλ³νλ λ° μ¬μ©λ©λλ€.
2οΈβ£ λ¨μΌ λλ λ³΅ν© ν€.
-
@Id
λ λ¨μΌ νλλ₯Ό κΈ°λ³Έ ν€(Primary Key)λ‘ μ§μ ν λ μ¬μ©λλ©°, λ³΅ν© ν€(λ κ° μ΄μμ νλλ‘ κ΅¬μ±λ κΈ°λ³Έ ν€(Primary Key))λ₯Ό μ§μ ν λλ@IdClass
λλ@EmbeddedId
μ΄λ Έν μ΄μ μ ν¨κ» μ¬μ©ν μ μμ΅λλ€.
3οΈβ£ μλ μμ±.
- κΈ°λ³Έ ν€(Primary Key)λ μλμΌλ‘ μμ±λ μ μμΌλ©°, μ΄λ₯Ό μν΄
@GeneratedValue
μ΄λ Έν μ΄μ κ³Ό ν¨κ» μ¬μ©ν©λλ€.-
@GeneratedValue
λ κΈ°λ³Έ ν€(Primary Key) μμ± μ λ΅μ μ μν©λλ€.(μ:AUTO
,IDENTITY
,SEQUENCE
,TABLE
).
-
2οΈβ£ μμ.
1οΈβ£ λ¨μν κΈ°λ³Έ ν€(Primary Key) μ§μ .
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity // μν°ν° ν΄λμ€ μ μΈ
public class User {
@Id // κΈ°λ³Έ ν€λ‘ μ§μ
private Long id; // μ΄ νλκ° κΈ°λ³Έ ν€κ° λ¨
private String name;
private String email;
// κΈ°λ³Έ μμ±μ λ° Getter, Setter
public User() {}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
- μ μμμμ
id
νλλ@Id
μ΄λ Έν μ΄μ μΌλ‘ μ§μ λμ΄ κΈ°λ³Έ ν€(Primary Key)κ° λ©λλ€.- κΈ°λ³Έ ν€(Primary Key)λ κ³ μ νκ² μν°ν°λ₯Ό μλ³νλ κ°μ λλ€.
2οΈβ£ κΈ°λ³Έ ν€ μλ μμ±.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class Product {
@Id // κΈ°λ³Έ ν€(Primary Key)λ‘ μ§μ .
@GeneratedValue(strategy = GenerationType.IDENTITY) // κΈ°λ³Έ ν€(Primary Key) μλ μμ±/
private Long productId; // μ΄ νλκ° μλ μμ±λλ κΈ°λ³Έ ν€.
private String name;
private Double price;
// κΈ°λ³Έ μμ±μ λ° Getter and Setter
public Product () {}
public Long getProductId() {
return productId;
}
public void setProductId(Long productId) {
this.productId = productId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
}
- μ΄ μμμμλ
@GeneratedValue(strategy = GenerationType.IDENTITY)
λ₯Ό μ¬μ©νμ¬productId
κ° λ°μ΄ν°λ² μ΄μ€μμ μλμΌλ‘ μμ±λ©λλ€.-
IDENTITY
μ λ΅μ λ°μ΄ν°λ² μ΄μ€κ° μλμΌλ‘ μ¦κ°νλ κ°μ κΈ°λ³Έ ν€(Primary Key)λ‘ μ¬μ©νλλ‘ ν©λλ€.
-
3οΈβ£ κΈ°λ³Έ ν€(Primary Key) μμ± μ λ΅.
-
@GeneratedValue
μ΄λ Έν μ΄μ κ³Ό ν¨κ» μ¬μ©νμ¬ κΈ°λ³Έ ν€(Primary Key)κ° μλμΌλ‘ μμ±λλλ‘ μ€μ ν μ μμ΅λλ€.- μμ± μ λ΅μ λ€ κ°μ§κ° μμ΅λλ€.
1οΈβ£ AUTO
- JPA ꡬνμ²΄κ° μ μ ν μμ± μ λ΅μ μλμΌλ‘ μ νν©λλ€.
2οΈβ£ IDENTITY
- κΈ°λ³Έ ν€(Primary Key) κ°μ λ°μ΄ν°λ² μ΄μ€κ° μλμΌλ‘ μ¦κ°μμΌ μμ±ν©λλ€(μ£Όλ‘ MySQLμμ μ¬μ©)
3οΈβ£ SEQUENCE
- λ°μ΄ν°λ² μ΄μ€ μνμ€λ₯Ό μ¬μ©νμ¬ κΈ°λ³Έ ν€(Primary Key) κ°μ μμ±ν©λλ€.(μ£Όλ‘ Oracleμμ μ¬μ©).
π λ°μ΄ν°λ² μ΄μ€ μνμ€(Sequence)
λ°μ΄ν°λ² μ΄μ€μμ κ³ μ ν μ«μ κ°μ μμ°¨μ μΌλ‘ μμ±νκΈ° μν΄ μ¬μ©λλ κ°μ²΄μ λλ€.
μ£Όλ‘ κΈ°λ³Έ ν€(Primary Key)λ λ€λ₯Έ κ³ μ μλ³μλ₯Ό μλμΌλ‘ μμ±νλ μ©λλ‘ μ¬μ©λ©λλ€.
μνμ€(Sequence)λ νΉμ κ·μΉμ λ°λΌ μ«μλ₯Ό μμ±νλ©°, μλμΌλ‘ μ¦κ°νλ μ«μ κ°μ μ κ³΅ν΄ λ°μ΄ν°λ² μ΄μ€μ μ¬λ¬ ν(Row)μ κ³ μ ν κ°μ ν λΉν μ μμ΅λλ€.
4οΈβ£ TABLE
- ν€ κ°μ μ μ₯νκΈ° μν λ³λμ ν μ΄λΈμ μ¬μ©ν©λλ€.
4οΈβ£ μμ½.
-
@Id
λ JPAμμ μν°ν°μ κΈ°λ³Έ ν€(Primary Key)λ₯Ό μ§μ νλ μ΄λ Έν μ΄μ μΌλ‘, μν°ν°μ κ° μΈμ€ν΄μ€λ₯Ό κ³ μ νκ² μλ³ν©λλ€. - κΈ°λ³Έ ν€(Primary Key)λ νμμ μΌλ‘ μ μν΄μΌ νλ©°, νμμ λ°λΌ
@GeneratedValue
λ₯Ό μ¬μ©ν΄ μλμΌλ‘ μμ±ν μ μμ΅λλ€.