@Enumerated μλ°μ enum νμ
μ 맀νν λ μ¬μ©ν©λλ€. μμ± μμ± κΈ°λ₯ κΈ°λ³Έκ° value EnumType.ORDINAL : enum μμλ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ₯ EnumType.STRING : enum μ΄λ¦μ λ°μ΄ν°λ² μ΄μ€μ μ μ₯ EnumType.ORDINAL κ²°λ‘ λΆν° λ§νλ©΄ EnumType.STRINGμ μ¬μ©νλ κ²μ κΆμ₯ν©λλ€. μμ enum RoleType { ADMIN, USER } @Enumerated(EnumType.STRING) private RoleType roleType; EnumType.ORDINAL enumμ μ μλ μμλλ‘, ADMINμ 0, USERμ 1κ°μ΄ λ°μ΄ν°λ² μ΄μ€μ μ μ₯λ©λλ€. μ₯μ : λ°μ΄ν°λ² μ΄μ€μ μ μ₯λλ λ°μ΄ν° ν¬κΈ°κ° μμ΅λλ€. λ¨μ : μ΄λ―Έ μ μ₯λ enumμ..
ποΈ Spring/JPA
π§ @Column @Columnμ κ°μ²΄ νλλ₯Ό ν
μ΄λΈμ 컬λΌμ 맀νμμΌμ£Όλ μ΄λ
Έν
μ΄μ
μ
λλ€. μμ± μμ± κΈ°λ₯ κΈ°λ³Έκ° name νλμ 맀νν ν
μ΄λΈμ μ»¬λΌ μ΄λ¦μ μ§μ νλ€. κ°μ²΄μ νλ μ΄λ¦ insertable (κ±°μ μ¬μ©νμ§ μμ) μν°ν° μ μ₯ μ μ΄ νλλ κ°μ΄ μ μ₯νλ€. falseλ‘ μ€μ νλ©΄ μ΄ νλλ λ°μ΄ν°λ² μ΄μ€μ μ μ₯νμ§ μλλ€. false μ΅μ
μ μ½κΈ° μ μ©μΌ λ μ¬μ©νλ€ true updateable μν°ν° μμ μ μ΄ νλλ κ°μ΄ μμ νλ€. falseλ‘ μ€μ νλ©΄ λ°μ΄ν°λ² μ΄μ€μ μμ νμ§ μλλ€. false μ΅μ
μ μ½κΈ° μ μ©μΌ λ μ¬μ©νλ€ true table (κ±°μ μ¬μ©νμ§ μμ) νλμ μν°ν°λ₯Ό λ κ° μ΄μμ ν
μ΄λΈμ 맀νν λ μ¬μ©νλ€.(@SecondaryTable μ¬μ©) μ§μ ν νλλ₯Ό λ€λ₯Έ ν
..
@Entity JPAμμ μν°ν°λ μ½κ² μκ°νλ©΄, DB ν
μ΄λΈμ λμνλ νλμ ν΄λμ€λΌκ³ μκ°ν μ μμ΅λλ€. @Entityκ° λΆμ ν΄λμ€λ JPAκ° κ΄λ¦¬ν΄μ£Όλ©°, JPAλ₯Ό μ¬μ©ν΄μ DB ν
μ΄λΈκ³Ό 맀νν ν΄λμ€λ @Entityλ₯Ό κΌ λΆμ¬μΌλ§ 맀νμ΄ κ°λ₯ν©λλ€. @Entityλ₯Ό μ¬μ©ν λλ λͺκ°μ§ μ£Όμμ¬νμ΄ μμ΅λλ€. μ£Όμμ¬ν μ κ·Ό μ μ΄μκ° public νΉμ protected μΈ κΈ°λ³Έ μμ±μκ° νμμ
λλ€. ꡬν체μ λ°λΌ λλ κ²λ μμΌλ, μ€νμ μ¬μ©νμ§ λͺ»νλλ‘ ν΄λμκΈ° λλ¬Έμ μ¬μ©νμ§ μλ κ²μ΄ μ’μ΅λλ€. final ν΄λμ€, enum, interface, inner ν΄λμ€μλ μ¬μ©μ΄ λΆκ°λ₯ν©λλ€ μ μ₯νλ €λ μμ±μ finalμ΄λ©΄ μλ©λλ€. ꡬν체μ λ°λΌ λλ κ²λ μμΌλ, μ€νμ μ¬μ©νμ§ λͺ»νλλ‘ ν΄λμ..
νλ¬μ μμμ± μ»¨ν
μ€νΈ(Persistence Context)μ λ°μ΄ν°λ² μ΄μ€λ₯Ό λκΈ°ννλ κ²μ μλ―Έν©λλ€. λ³΄ν΅ λ°μ΄ν°λ² μ΄μ€ νΈλμμ
μ΄ μ»€λ°λλ μκ°μ νλ¬μκ° λ°μν©λλ€. νλ¬μκ° λ°μνλ©΄ "μ°κΈ° μ§μ° μ μ₯μ"μ λͺ¨μλλ INSERT, UPDATE, DELETE SQLλ±μ΄ λ°μ΄ν°λ² μ΄μ€μ μ λ¬λ©λλ€. μ¦ νλ¬μκ° λ°μνλ©΄ μμμ± μ»¨ν
μ€νΈμ λ³κ²½μ¬νμ DBμ λ°μν¨μΌλ‘μ¨ DBμ μμμ± μ»¨ν
μ€νΈλ₯Ό λκΈ°νμν€λ κ²μ
λλ€. νλ¬μκ° λ°μνλ©΄ νλ¬μκ° λ°μνλ©΄ λ€μκ³Ό κ°μ μΌμ΄ μ°¨λ‘λλ‘ μνλ©λλ€ λ³κ²½ κ°μ§(Dirty Checking) μμ λ μν°ν°κ° μλ€λ©΄ μ°κΈ° μ§μ° SQL μ μ₯μμ λ±λ‘ μ°κΈ° μ§μ° SQL μ μ₯μμ 쿼리λ₯Ό λ°μ΄ν°λ² μ΄μ€μ μ μ‘(λ±λ‘, μμ , μμ ) νλ¬μνλ λ°©λ² em.flush() - μ§μ νΈμΆ ..
μν°ν°μ μλͺ
μ£ΌκΈ° μν°ν°λ λ€μκ³Ό κ°μ΄ 4λ¨κ³μ μλͺ
μ£ΌκΈ°κ° μμ΅λλ€. λΉμμ (new/transient) μμ (managed) μ€μμ (detached) μμ (removed) λΉμμ(new/transient) λΉμμ μνλ κ°μ²΄λ₯Ό μλ‘ μμ±ν μνμ
λλ€. JPAμ μ ν κ΄κ³μμ΄ κ°μ²΄λ§ μμ±ν μνμ
λλ€. Member member = new Member(1L, "μ λν"); //memberλ λΉμμ μν μμ μνκ° μλλ―λ‘ λΉμ°ν μμμ± μ»¨ν
μ€νΈμ μν΄ κ΄λ¦¬λμ§ μμΌλ©°, 1μ°¨ μΊμ, λ³κ²½κ°μ§λ±μ κΈ°λ₯μ΄ μ μ©λμ§ μμ΅λλ€. μμ(managed) μμμ± μ»¨ν
μ€νΈμ μν΄μ κ΄λ¦¬λμ΄μ§λ μνμ
λλ€. μμ±ν κ°μ²΄λ₯Ό em.persist()λ₯Ό ν΅ν΄ μμμ± μ»¨ν
μ€νΈμ μ μ₯νκ±°λ, νΉμ em.find()λ₯Ό ν΅ν΄ D..
π§ μν°ν° 맀λμ ν©ν 리 & μν°ν° 맀λμ μμμ± μ»¨ν
μ€νΈμ λν΄ μμ보기 μ μ μν°ν° 맀λμ ν©ν 리μ μν°ν° 맀λμ μ λν΄μ μμλ³΄κ² μ΅λλ€. μν°ν° 맀λμ ν©ν 리λ μμ±λλ μμ μ DB 컀λ₯μ
νμ μμ±ν΄ λ ν, κ³ κ°μ μμ²μ΄ λ€μ΄μ¬ λλ§λ€ μν°ν° 맀λμ λ₯Ό μμ±ν©λλ€. μν°ν° 맀λμ λ DB μ°κ²°μ΄ νμν μμ (λ³΄ν΅ νΈλμμ
μ΄ μμλλ κ²½μ°)μ 컀λ₯μ
νμ μλ connectionμ μ»μ΅λλ€. π§ μν°ν° 맀λμ ν©ν λ¦¬κ° μν°ν° 맀λμ λ₯Ό μ¬μ©νλ μ΄μ μν°ν° 맀λμ ν©ν 리λ μμ±λλ μμ μ DB 컀λ₯μ
νμ μμ±νκΈ°μ μμ± λΉμ©μ΄ λ§€μ° ν½λλ€. κ·Έλ¬λ μν°ν° 맀λμ μ μμ± λΉμ©μ κ±°μ λ€μ§ μμΌλ―λ‘, μν°ν° 맀λμ ν©ν 리λ νμμ λ°λΌ μ€ν°ν° 맀λμ λ₯Ό μμ±νμ¬ μ¬μ©ν©λλ€. μν°ν° 맀λμ ν©ν 리λ μ€λ λ ..