Home
>
Spring
>
π[Spring] JPA μ΄λ
Έν
μ΄μ
- `@GeneratedValue`
Spring
Framework
π[Spring] JPA μ΄λ
Έν
μ΄μ
- @GeneratedValue
-
@GeneratedValue
λ JPA(Java Persistence API)μμ κΈ°λ³Έ ν€(Primary Key) κ°μ μλμΌλ‘ μμ±ν λ μ¬μ©νλ μ΄λ
Έν
μ΄μ
μ
λλ€.
- μ΄ μ΄λ
Έν
μ΄μ
μ μν°ν°(Entity)μ κΈ°λ³Έ ν€(Primary Key) νλμ κ°μ μλμΌλ‘ ν λΉνλ λ°©μμ μ μνλ©°, λ°μ΄ν°λ² μ΄μ€μμ κΈ°λ³Έ ν€(Primary Key)κ° μμ±λλ λ°©λ²μ μ€μ ν μ μμ΅λλ€.
1οΈβ£ μ£Όμ νΉμ§.
1οΈβ£ μλμΌλ‘ κΈ°λ³Έ ν€ κ° μμ±.
-
@GeneratedValue
λ κΈ°λ³Έ ν€(Primary Key)μ μλμΌλ‘ κ°μ ν λΉνμ§ μκ³ , λ°μ΄ν°λ² μ΄μ€λ JPA(Java Persistence API) ꡬνμ²΄κ° κΈ°λ³Έ ν€(Primary Key) κ°μ μλμΌλ‘ μμ±νλλ‘ ν©λλ€.
2οΈβ£ μ λ΅(GenerationType) μ€μ .
-
@GenerationType
λ strategy
μμ±μ μ¬μ©νμ¬, κΈ°λ³Έ ν€ κ°(Primary Key)μ μμ±νλ λ°©μμ μ€μ ν μ μμ΅λλ€.
- JPA(Java Persistence API)λ λ€ κ°μ§ μμ± μ λ΅μ μ 곡ν©λλ€.
AUTO
IDENTITY
SEQUENCE
TABLE
2οΈβ£ μμ± μ λ΅(GenerationType)
1οΈβ£ GenerationType.AUTO
- κΈ°λ³Έ ν€(Primary Key) μμ± μ λ΅μ JPA(Java Persistence API) ꡬν체(μ: Hibernate)κ° μλμΌλ‘ μ ννλλ‘ ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€μ λ§λ μ΅μ μ λ°©λ²μ JPA(Java Persistence API)κ° κ²°μ ν©λλ€.
- μΌλΆ λ°μ΄ν°λ² μ΄μ€μμλ SEQUENCE λ°©μ, λ€λ₯Έ λ°μ΄ν°λ² μ΄μ€μμλ IDENTITY λ°©μ λ±μ μ¬μ©ν μ μμ΅λλ€.
2οΈβ£ GenerationType.IDENTITY
- κΈ°λ³Έ ν€ κ°μ΄ μλ μ¦κ°νλ 컬λΌ(Column,μ΄)μ μ¬μ©νλ λ°©μμ
λλ€.
- λ°μ΄ν°λ² μ΄μ€κ° μ§μ κΈ°λ³Έ ν€(Primary Key) κ°μ μμ±ν©λλ€.
- μλ₯Ό λ€μ΄, MySQLμμλ
AUTO_INCREMENT
, SQL Serverμμλ IDENTITY
컬λΌ(Column, μ΄)μ μ¬μ©νμ¬ κ°μ μλμΌλ‘ μ¦κ°μν΅λλ€.
-
IDENTITY
μ λ΅μ λ°μ΄ν°λ² μ΄μ€μ μμ‘΄μ μ΄λ©°, μ¦κ°μ μΌλ‘ κ°μ΄ μμ±λ©λλ€(λ°μ΄ν°κ° μ½μ
λκΈ° μ μ 미리 μ μ μμ).
3οΈβ£ GenerationType.SEQUENCE
-
μνμ€ κ°μ²΄λ₯Ό μ¬μ©νμ¬ κΈ°λ³Έ ν€ κ°μ μμ±ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€μ ν
μ΄λΈμ ν΅ν κ³ μ ν ID κ°μ κ΄λ¦¬νλ©°, μ΄ λ°©μμ λ°μ΄ν°λ² μ΄μ€ λ
립μ μΈ λ°©μμ΄μ§λ§ μ±λ₯μ΄ λ¨μ΄μ§ μ μμ΅λλ€.
3οΈβ£ @GeneratedValue
μ¬μ© μμ.
1οΈβ£ AUTO μ λ΅.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO) // κΈ°λ³Έ ν€ μμ± μ λ΅μ JPAκ° μλμΌλ‘ μ ν.
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;
}
}
2οΈβ£ IDENTITY μ λ΅.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY) // λ°μ΄ν°λ² μ΄μ€κ° μλ μ¦κ°νλ λ°©μμΌλ‘ κΈ°λ³Έ ν€(Primary Key) μμ±
private Long productId;
private String name;
private Double price;
// κΈ°λ³Έ μμ±μ λ° Getter, 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;
}
}
3οΈβ£ SEQUENCE μ λ΅.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.SequenceGenerator;
@Entity
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "order_seq") // μνμ€
@SequenceGenerator(name = "order_seq", sequenceName = "order_sequence", allocationSize = 1)
private Long orderId;
private String product;
private int quantity;
// κΈ°λ³Έ μμ±μ λ° Getter, Setter
public Order() {}
public Long getOrderId() {
return orderId;
}
public void setOrderId(Long orderId) {
this.orderId = orderId;
}
public String getProduct() {
return product;
}
public void setProduct(String product) {
this.product = product;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
}
- μ μ½λμμλ
@SequenceGenerator
λ₯Ό μ¬μ©νμ¬ μνμ€μ λν μΈλΆ μ€μ μ μ§μ ν©λλ€.
-
sequenceName
μ λ°μ΄ν°λ² μ΄μ€μμ μ¬μ©ν μνμ€μ μ΄λ¦μ μ μνκ³ , allocationSize
λ μνμ€ κ°μ 미리 ν λΉνλ ν¬κΈ°λ₯Ό μ§μ ν©λλ€.
4οΈβ£ μμ½.
-
@GeneratedValue
λ JPA(Java Persistence API)μμ κΈ°λ³Έ ν€(Primary Key)λ₯Ό μλμΌλ‘ μμ±ν λ μ¬μ©νλ μ΄λ
Έν
μ΄μ
μ
λλ€.
- μμ± μ λ΅(
GenerationType
)μλ AUTO
, IDENTITY
, SEQUENCE
, TABLE
μ΄ μμΌλ©°, κ° μ λ΅μ κΈ°λ³Έ ν€(Primary Key)λ₯Ό μμ±νλ λ°©μμ λ°λΌ λ€λ₯΄κ² λμν©λλ€.
-
AUTO
λ JPA(Java Persistence API)κ° μλμΌλ‘ μ λ΅μ μ ννκ³ , IDENTITY
λ λ°μ΄ν°λ² μ΄μ€μ μλ μ¦κ° κΈ°λ₯μ μ¬μ©νλ©°, SEQUENCE
λ μνμ€ κ°μ²΄λ₯Ό ν΅ν΄ κΈ°λ³Έ ν€(Primary Key)λ₯Ό μμ±νκ³ , TABLE
μ λ³λμ ν
μ΄λΈμ ν΅ν΄ κ³ μ κ°μ κ΄λ¦¬ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ JPAλ κΈ°λ³Έ ν€ κ°μ μ½κ² μμ±νκ³ κ΄λ¦¬ν μ μμ΄, κ°λ°μλ κΈ°λ³Έ ν€ μμ±μ λν΄ μ κ²½ μ°μ§ μμλ λ©λλ€.