1οΈβ£ @Entity
β‘οΈ JPA λ₯Ό μ¬μ©ν΄μ ν μ΄λΈκ³Ό λ§€νν ν΄λμ€λ @Entity μ΄λ Έν μ΄μ μ νμλ‘ λΆμ¬μΌνλ€. @Entity κ° λΆμ ν΄λμ€λ JPA κ° κ΄λ¦¬νκ² λλ€.
β μμ±
name : JPA μμ μ¬μ©ν μν°ν° μ΄λ¦μ μ§μ νλ€. λν΄νΈκ°μ ν΄λμ€ μ΄λ¦μ΄λ€.
β‘ μ£Όμ μ¬ν
- κΈ°λ³Έ μμ±μλ νμμ΄λ€. (νλΌλ―Έν°κ° μλ public λλ protected μμ±μ)
- final ν΄λμ€, enum, interface,k inner ν΄λμ€μλ μ¬μ©ν μ μλ€.
- μ μ₯ν νλμ final μ μ¬μ©νλ©΄ μλλ€.
2οΈβ£ @Table
β‘οΈ μν°ν°μ λ§€νν ν μ΄λΈμ μ§μ νλ€. μλ΅νλ©΄ λ§€νν μν°ν° μ΄λ¦μ ν μ΄λΈ μ΄λ¦μΌλ‘ μ¬μ©νλ€.
name : λ§€νν ν μ΄λΈ μ΄λ¦μ μ§μ νλ€. λν΄νΈκ°μ μν°ν° μ΄λ¦μ΄λ€.
catalog : catalog κΈ°λ₯μ΄ μλ DB μμ catalog λ₯Ό λ§€ννλ€.
schema : schema κΈ°λ₯μ΄ μλ DB μμ schema λ₯Ό λ§€ννλ€.
3οΈβ£ λ€μν λ§€ν μ¬μ©
β‘οΈ νμ ν μ΄λΈμμ μλμ κ°μ 쑰건λ€μ΄ μΆκ°λμλ€.
- νμμ μΌλ° νμκ³Ό κ΄λ¦¬μλ‘ κ΅¬λΆν΄μΌνλ€.
- νμ κ°μ μΌκ³Ό μμ μΌμ΄ μμ΄μΌ νλ€.
- νμμ μ€λͺ ν μ μλ νλκ° μμ΄μΌ νλ€. (κΈΈμ΄ μ ν μμ)
// Getter & Setter & Constructor μλ΅
@Entity
@Table(name="MEMBER")
public class Member {
@Id
@Column(name = "ID")
private String id;
private String username;
private Integer age;
@Enumerated(EnumType.STRING)
private RoleType roleType;
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Lob
private String description;
}
- @Enumerated : Java μ enum μ μ¬μ©νκΈ° μν μ΄λ Έν μ΄μ . νμ¬ μν©μμλ 쑰건 1 μ λ§μ‘±νκΈ° μν΄ μ¬μ©νλ€.
- @Temporal : μλ°μ λ μ§ νμ μ μ¬μ©νκΈ° μν μ΄λ Έν μ΄μ . νμ¬ μν©μμλ 쑰건 2 λ₯Ό λ§μ‘±νκΈ° μν΄ μ¬μ©νλ€.
- @Lob : VARCHAR λμ κΈΈμ΄ μ νμ΄ μλ CLOB μ μ¬μ©νκΈ° μν μ΄λ Έν μ΄μ . νμ¬ μν©μμλ 쑰건 3 μ λ§μ‘±νκΈ° μν΄ μ¬μ©νλ€.
4οΈβ£ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§ μλ μμ±
β‘οΈ JPA λ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§λ₯Ό μλμΌλ‘ μμ±νλ κΈ°λ₯μ μ§μνλ€.
β hibernate.hbm2ddl.auto
<property name="hibernate.hbm2ddl.auto" value="{μ¬μ©ν μμ±}">
β‘οΈ ν΄λΉ μμ±μ μΆκ°νλ©΄ μ ν리μΌμ΄μ μ€ν μμ μ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμ μλμΌλ‘ μμ±νλ€.
| μ΅μ | μ€λͺ |
| create | κΈ°μ‘΄ ν μ΄λΈμ μμ νκ³ μλ‘ μμ±νλ€. DROP + CREATE |
| create-drop | create μμ±μ μΆκ°λ‘ μ ν리μΌμ΄μ μ μ’ λ£ν λ μμ±ν DDL μ μ κ±°νλ€. DROP + CREATE + DROP |
| update | λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό μν°ν° λ§€νμ 보λ₯Ό λΉκ΅ν΄μ λ³κ²½μ¬νλ§ μμ νλ€. |
| validate | λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈκ³Ό μν°ν° λ§€νμ 보λ₯Ό λΉκ΅ν΄μ μ°¨μ΄κ° μμΌλ©΄ κ²½κ³ λ₯Ό λ¨κΈ°κ³ μ ν리μΌμ΄μ
μ μ€ννμ§ μλλ€. μ΄ μ€μ μ DDL μ μμ νμ§ μλλ€. |
| none | μλ μμ± κΈ°λ₯ OFF |
β‘ hibernate.show_sql
<property name="hibernate.show_sql" value="true">
β‘οΈ ν΄λΉ μμ±μ μΆκ°νλ©΄ μ½μ νλ©΄μμ μ€νλλ ν μ΄λΈ μμ± DDL μ μΆλ ₯ν μ μλ€.
5οΈβ£ DDL μμ± κΈ°λ₯
β‘οΈ νμ ν μ΄λΈμμ μλ 쑰건λ€μ΄ μΆκ°λμλ€.
- νμ μ΄λ¦μ νμλ‘ μ λ ₯λμ΄μΌ νλ€.
- νμ μ΄λ¦μ 10μλ₯Ό μ΄κ³Όνλ©΄ μ λλ€.
// Getter & Setter & Constructor μλ΅
@Entity
@Table(name="MEMBER", uniqueConstraints = {@UniqueConstraint(
name = "NAME_AGE_UNIQUE",
columnNames = {"NAME", "AGE"} )}) // μΆκ°
public class Member {
// μλ΅
@Column(name = "NAME", nullable = false, length = 10) // μΆκ°
private String username;
// μλ΅
}
- @Column : nullable μ false λ‘, length λ₯Ό 10μΌλ‘ μ€μ νλ©΄μ 쑰건μ λ§μ‘±νλ€.
- @Table : uniqueConstraints μμ±μ ν΅ν΄μ μ μ½μ‘°κ±΄μ νμ ν μ μλλ‘ νλ€.
β‘οΈ μ μ΄λ Έν μ΄μ λ€μ λ¨μ§ DDL μ μλ μμ±ν λλ§ μ¬μ©λκ³ JPAμ μ€ν λ‘μ§μλ μν₯μ μ£Όμ§ μμ§λ§ κ°λ°μκ° μν°ν°λ§ λ³΄κ³ λ μμ½κ² λ€μν μ μ½μ‘°κ±΄μ νμ ν μ μλ μ₯μ μ΄ μλ€.
7οΈβ£ νλμ μ»¬λΌ λ§€ν : λ νΌλ°μ€
β @Column
β‘οΈ κ°μ²΄ νλλ₯Ό ν μ΄λΈ 컬λΌμ λ§€ν, μμ± μ€μλ name, nullable μ΄ μ£Όλ‘ μ¬μ©λλ€.
β‘οΈ int (μλ° κΈ°λ³Έ νμ ) κ³Ό Integer (κ°μ²΄ νμ ) μ λΉκ΅νμ λ int μλ null μ΄ λ€μ΄κ° μ μμΌλ―λ‘ nullable μ false λ‘ μ§μ νλ κ²μ΄ μ’λ€.
β‘ @Enumerated
β‘οΈ μλ°μ enum νμ μ λ§€νν λ μ¬μ©λλ€.
// enum νμ
enum RoleType {
ADMIN, USER
}
// Entity Column νν
@Enumerated(EnumType.STRING)
private RoleType roleType;
// μ μ©
member.setRoleType(RoleType.ADMIN);
β‘οΈ DB μλ ADMIN μΌλ‘ μ μ₯λλ€.
β‘οΈ enum μ μ¬μ©νλ©΄ νΉμλ λ°μν μ μλ μ€νλ‘ μΈν μ€λ₯λ₯Ό λ°©μ§ν μ μλ€.
β’ @Temporal
β‘οΈ λ μ§ νμ μ λ§€νν λ μ¬μ©λλ€. @Temporal μ μλ΅νλ©΄ TIMESTAMP λ‘ μ§μ λλ€.
| μμ± | κΈ°λ₯ | κΈ°λ³Έκ° |
| value | TemporalType.DATE: λ μ§ λ€μ΄ν°λ² μ΄μ€ date νμ
κ³Ό λ§€ν(μ: 2013-10-11) TemporalType.TIME: μκ°, λ°μ΄ν°λ² μ΄μ€ time νμ κ³Ό λ§€ν(μ: 11:11:11) TemporalType.TIMESTAMP: λ μ§μ μκ°, λ°μ΄ν°λ² μ΄μ€timestamp νμ κ³Ό λ§€ν(μ 2013-10-11 11:11:11) |
TemporalTypeμ νμλ‘ μ§μ ν΄μΌνλ€. |
β£ @Lob (= Large OBject)
β‘οΈ λ°μ΄ν°λ² μ΄μ€BLOB(= μ΄λ―Έμ§, λμμ λ±), CLOB(= λ¬Έμ λν κ°μ²΄) νμ κ³Ό λ§€ννλ€. λ§€ννλ νλ νμ μ΄ λ¬Έμλ©΄ CLOB μΌλ‘ λ§€ννκ³ λλ¨Έμ§λ BLOB μΌλ‘ λ§€ννλ€.
β€ @Transient
β‘οΈ κ°μ²΄μ μμλ‘ κ°μ 보κ΄νκ³ μΆμ λ μ¬μ©νλ€. λ°λΌμ DB μ μ μ₯ λλ μ‘°ννμ§ μλλ€.
β₯ @Access
β‘οΈ JPA κ° λ°μ΄ν°μ μ κ·Όνλ λ°©μμ μ§μ νλ€.
(1) νλ μ κ·Ό (AccessType.FIELD) : νλμ μ§μ μ κ·Όνλ€.
(2) νλ‘νΌν° μ κ·Ό (AccessType.PROPERTY) : μ κ·Όμ (Getter) μ ν΅ν΄ μ κ·Όνλ€.
'JPA π' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
| [JPA] μλ° ORM νμ€ JPA νλ‘κ·Έλλ° Ch.5 (1) | 2023.05.19 |
|---|---|
| [JPA] μλ° ORM νμ€ JPA νλ‘κ·Έλλ° Ch.3 (0) | 2023.05.05 |
| [JPA] μλ° ORM νμ€ JPA νλ‘κ·Έλλ° Ch.2 (0) | 2023.04.15 |
| [JPA] μλ° ORM νμ€ JPA νλ‘κ·Έλλ° Ch.1 (0) | 2023.04.07 |