π[Spring] JPA μ΄λ
Έν
μ΄μ
- @Entity
-
@Entity
λ JPA(Java Persistence API)μμ λ°μν°λ² μ΄μ€ ν μ΄λΈκ³Ό 맀νλλ μλ° ν΄λμ€λ₯Ό μ μν λ μ¬μ©νλ μ΄λ Έν μ΄μ (Annotation)μ λλ€.- μ΄ μ΄λ Έν μ΄μ (Annotation)μ ν΄λμ€μ λΆμ΄λ©΄ ν΄λΉ ν΄λμ€κ° JPA(Java Persistence API) μν°ν°(Entity)μμ λνλ΄λ©°, JPAκ° μ΄λ₯Ό λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό 맀ννμ¬ κ΄λ¦¬ν μ μκ² λ©λλ€.
π μν°ν°(Entity)
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(Object-Oriented Programming, OOP)κ³Ό λ°μ΄ν°λ² μ΄μ€(Database) μ€κ³μμ λͺ¨λ μ¬μ©λλ κ°λ μΌλ‘, νΉν JPA(Java Persistence API)μμ μμ£Ό μΈκΈλ©λλ€.
μν°ν°(Entity)λ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό 맀νλλ μλ° ν΄λμ€λ₯Ό μλ―Ένλ©°, λ°μ΄ν°λ² μ΄μ€μ κ° ν(Row)μ΄ μλ° ν΄λμ€μ κ°μ²΄(Instance, μΈμ€ν΄μ€)λ‘ λμλ©λλ€.
1οΈβ£ μ£Όμ νΉμ§.
1οΈβ£ μν°ν° ν΄λμ€(Entity Class)
-
@Entity
κ° μ μΈλ ν΄λμ€λ μν°ν°(Entity)λΌκ³ νλ©°, μ΄λ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμ λμνλ μλ° ν΄λμ€μ λλ€. - μν°ν° ν΄λμ€μ μΈμ€ν΄μ€(Instance, κ°μ²΄)λ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμ κ° ν(Row)μ λμλ©λλ€.
- ν΄λμ€λ λ°λμ κΈ°λ³Έ μμ±μ(default constructor)λ₯Ό κ°μ ΈμΌ νκ³ , κΈ°λ³Έ ν€(Primary Key)λ₯Ό μ μν΄μΌ ν©λλ€.
2οΈβ£ ν μ΄λΈ 맀ν(Table Mapping)
- ν΄λμ€μ
@Entity
μ΄λ Έν μ΄μ (Annotation)μ λΆμ΄λ©΄, JPA(Java Persistence API)λ ν΄λΉ ν΄λμ€λ₯Ό λ°μ΄ν°λ² μ΄μ€μ ν μ΄λΈκ³Ό 맀νν©λλ€. - ν
μ΄λΈμ μ΄λ¦μ κΈ°λ³Έμ μΌλ‘ ν΄λμ€ μ΄λ¦κ³Ό λμΌνκ² λ§€νλμ§λ§,
@Table
μ΄λ Έν μ΄μ (Annotation)μ μ¬μ©νμ¬ ν μ΄λΈ μ΄λ¦μ λͺ μμ μΌλ‘ μ§μ ν μλ μμ΅λλ€.
3οΈβ£ κΈ°λ³Έ ν€(Primary Key)
- μν°ν° ν΄λμ€λ λ°λμ νλμ νλλ₯Ό κΈ°λ³Έ ν€(Primary Key)λ‘ μ§μ ν΄μΌ νλ©°, μ΄λ₯Ό μν΄
@Id
μ΄λ Έν μ΄μ (Annotation)μ μ¬μ©ν©λλ€. - κΈ°λ³Έ ν€(Primary Key)μ μμ± μ λ΅μ
@GeneratedValue
μ΄λ Έν μ΄μ (Annotation)μ ν΅ν΄ μ§μ ν μ μμ΅λλ€.
2οΈβ£ μ¬μ© μμ.
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Table;
@Entity // μ΄ ν΄λμ€λ JPA μν°ν°μμ λνλ.
@Table(name = "users") // 맀νλ λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈ μ΄λ¦μ μ§μ .
public class User {
@Id
@GeneratedValue(strategy = GenerarionType.IDENTITY) // κΈ°λ³Έ ν€ μμ± μ λ΅
private Long id;
private String name;
private String email;
// κΈ°λ³Έ μμ±μ (νμ)
public User() {}
// μμ±μ, getter, setter λ±
public User(String name, String email) {
this.name = name;
this.email = email;
}
// Getter and Setter
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;
}
}
3οΈβ£ μ£Όμ μμ.
1οΈβ£ @Entity
- μ΄ μ΄λ Έν μ΄μ μ JPA(Java Persistence API)μκ² ν΄λΉ ν΄λμ€κ° λ°μ΄ν°λ² μ΄μ€μ ν μ΄λΈκ³Ό 맀νλλ μν°ν°(Entity)μμ μ립λλ€.
2οΈβ£ @Table
- ν
μ΄λΈ μ΄λ¦μ λͺ
μμ μΌλ‘ μ§μ νλ €λ©΄
@Table(name = "ν μ΄λΈμ΄λ¦")
μ μ¬μ©ν©λλ€. -
@Table
μ μ¬μ©νμ§ μμΌλ©΄ κΈ°λ³Έμ μΌλ‘ ν΄λμ€ μ΄λ¦μ΄ ν μ΄λΈ μ΄λ¦μΌλ‘ μ¬μ©λ©λλ€.
3οΈβ£ @Id
- ν΄λΉ νλλ μν°ν°(Entity)μ κΈ°λ³Έ ν€(Primary Key)λ‘ μ¬μ©λ©λλ€.
- λͺ¨λ μν°ν°λ λ°λμ νλμ κΈ°λ³Έ ν€(Primary Key)λ₯Ό κ°μ ΈμΌ ν©λλ€.
4οΈβ£ @GeneratedValue
- κΈ°λ³Έ ν€(Primary Key) κ°μ μμ± μ λ΅μ μ§μ ν©λλ€.
- μλ₯Ό μ¦μ΄,
GenerationType.IDENTITY
λ λ°μ΄ν°λ² μ΄μ€κ° μλμΌλ‘ κΈ°λ³Έ ν€(Primary Key) κ°μ μ¦κ°μν€λ μ λ΅μ μλ―Έν©λλ€.
- μλ₯Ό μ¦μ΄,
4οΈβ£ μ£Όμ μ¬ν.
- μν°ν° ν΄λμ€(Entity Class)λ λ°λμ κΈ°λ³Έ μμ±μ(default constructor)κ° μμ΄μΌ νλ©°,
public
λλprotected
μ κ·Ό μ μ΄μλ₯Ό κ°μ ΈμΌ ν©λλ€. - κΈ°λ³Έ ν€(Primary Key)λ₯Ό
@Id
μ΄λ Έν μ΄μ μΌλ‘ λ°λμ μ§μ ν΄μΌ ν©λλ€.
5οΈβ£ μμ½.
-
@Entity
λ JPA(Java Persistence API) μν°ν°λ₯Ό μ μΈνλ μ΄λ Έν μ΄μ μΌλ‘, ν΄λΉ ν΄λμ€λ₯Ό λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό 맀νν©λλ€. - μ΄λ₯Ό ν΅ν΄ JPAλ μν°ν°λ₯Ό μλμΌλ‘ κ΄λ¦¬νκ³ , λ°μ΄ν°λ² μ΄μ€μ μνΈμμ©ν μ μκ² λ©λλ€.