[μ 보] spring bootμμ entity id μμ± μ λ΅
Spring Bootμμ JPAμ ν¨κ» μ¬μ©λλ Entity ID μμ± μ λ΅μ μ£Όλ‘ λ°μ΄ν°λ² μ΄μ€μ κΈ°λ³Έ ν€(primary key)λ₯Ό μλ μμ±νλ λ°©μμ μ¬μ©ν©λλ€. μ΄λ₯Ό μν΄ λ€μν μ λ΅μ΄ μ¬μ©λλ©°, μ£Όμ μ λ΅μ λ€μκ³Ό κ°μ΅λλ€.
GenerationType.AUTO (κΈ°λ³Έ μ λ΅)
μ΄ μ λ΅μ JPAκ° λ°μ΄ν°λ² μ΄μ€μ λ°λΌ μλμΌλ‘ μ ννλ ID μμ± μ λ΅μ
λλ€. λ°μ΄ν°λ² μ΄μ€μ λ°λΌ GenerationType.SEQUENCE, GenerationType.IDENTITY, GenerationType.TABLE μ€ νλλ₯Ό μ¬μ©νκ² λ©λλ€.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
}
GenerationType.IDENTITY
μ΄ μ λ΅μ λ°μ΄ν°λ² μ΄μ€μ μλ μ¦κ°(auto-increment) κΈ°λ₯μ μ¬μ©νμ¬ IDλ₯Ό μμ±ν©λλ€. MySQL, PostgreSQL, SQL Server λ±μμ μ¬μ©ν μ μμ΅λλ€.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
}
GenerationType.SEQUENCE
μ΄ μ λ΅μ λ°μ΄ν°λ² μ΄μ€μ μνμ€(sequence) κΈ°λ₯μ μ¬μ©νμ¬ IDλ₯Ό μμ±ν©λλ€. μνμ€λ λ°μ΄ν°λ² μ΄μ€μμ κ³ μ ν κ°μ μμ°¨μ μΌλ‘ μμ±νλ κ°μ²΄μ
λλ€. μ£Όλ‘ Oracle, PostgreSQL λ±μμ μ¬μ©λ©λλ€. μνμ€λ₯Ό μ¬μ©νλ €λ©΄ @SequenceGenerator μ΄λ
Έν
μ΄μ
μ μΆκ°ν΄μΌ ν©λλ€.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "my_entity_seq")
@SequenceGenerator(name = "my_entity_seq", sequenceName = "my_entity_seq", allocationSize = 1)
private Long id;
}
GenerationType.TABLE
μ΄ μ λ΅μ λ³λμ λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈμ μ¬μ©νμ¬ IDλ₯Ό μμ±ν©λλ€. μ΄ ν
μ΄λΈμ λͺ¨λ μν°ν°μ λν IDλ₯Ό κ΄λ¦¬νλ©°, μ¬λ¬ μν°ν°μμ 곡μ ν μ μμ΅λλ€. @TableGenerator μ΄λ
Έν
μ΄μ
μ μΆκ°ν΄μΌ ν©λλ€.
@Entity
public class MyEntity {
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "my_entity_gen")
@TableGenerator(name = "my_entity_gen", table = "id_gen", pkColumnName = "gen_name", valueColumnName = "gen_val", allocationSize = 1)
private Long id;
}
μμ μ λ΅ μ€ νλλ₯Ό μ ννμ¬ Spring Boot νλ‘μ νΈμμ Entity ID μμ± μ λ΅μ ꡬνν μ μμ΅λλ€. λ°μ΄ν°λ² μ΄μ€μ μ’ λ₯μ μ±λ₯, νμ₯μ± λ±μ μꡬμ¬νμ κ³ λ €νμ¬ μ μ ν μ λ΅μ μ ννλ κ²μ΄ μ€μν©λλ€.