π£ μ΄ κΈμ κΉμνλμ 'μλ° ORM νμ€ JPA νλ‘κ·Έλλ°'μ 곡λΆνλ©° μ 리ν κ²μμ μ립λλ€.
-
ν μ΄λΈκ³Ό 맀νν ν΄λμ€λ
@Entity
μ΄λ Έν μ΄μ μ νμ -
μμ±
-
name
JPAμμ μ¬μ©ν μν°ν° μ΄λ¦ μ§μ , λ³΄ν΅ κΈ°λ³Έκ°μΈ ν΄λμ€ μ΄λ¦ μ¬μ©
-
-
μ£Όμμ¬ν
- κΈ°λ³Έ μμ±μλ νμ
- final, enum, interface, inner ν΄λμ€μμλ μ¬μ© λΆκ°
- μ μ₯ν νλμ final λΆκ°
-
μν°ν°μ 맀νν ν μ΄λΈμ μ§μ
-
μμ±
-
name
맀νν ν μ΄λΈ μ΄λ¦, κΈ°λ³Έκ°μΌλ‘λ μν°ν° μ΄λ¦ μ¬μ©
-
catalog
catalog κΈ°λ₯μ΄ μλ λλΉμμ catalogλ₯Ό 맀ν
-
schema
schema κΈ°λ₯μ΄ μλ λλΉμμ schemaλ₯Ό 맀ν
-
uniqueConstraints(DDL)
DDL μμ± μμ μ λν¬ μ μ½μ‘°κ±΄μ λ§λ¦, 2κ° μ΄μμ λ³΅ν© μ λν¬ μ μ½μ‘°κ±΄λ κ°λ₯
μ€ν€λ§ μλ μμ± κΈ°λ₯μ μ¬μ©νμ¬ DDLμ λ§λ€ λλ§ κ°λ₯
-
- μλ΅
-
JPAλ λ°μ΄ν°λ² μ΄μ€ μ€ν€λ§λ₯Ό μλμΌλ‘ μμ±νλ κΈ°λ₯μ μ§μ(JPA 2.1λΆν°λ μλ μμ±μ νμ€ μ§μ, update, validate μ΅μ X)
-
ν΄λμ€μ 맀ν μ 보μ λ°μ΄ν°λ² μ΄μ€ λ°©μΈμ μ¬μ©νμ¬ μ€ν€λ§ μμ±
-
<propery name="hibernate.hbm2ddl.auto" value="create" />
λ€μκ³Ό κ°μ μ½λλ₯Ό
persistence.xml
μ μΆκ°νλ©΄ μ ν리μΌμ΄μ μ€ν μμ μ λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈμ μλμΌλ‘ μμ±- valueμλ λ€μκ³Ό κ°μ μ΅μ
λ€μ΄ λ€μ΄κ°
- create : κΈ°μ‘΄ ν
μ΄λΈ μμ ν μλ‘ μμ±
(κ°λ° μ΄κΈ°, CI μλ²) - create-drop : create μμ± + μ’
λ£μ ν
μ΄λΈ μ κ±°
(CI μλ²) - update : λ°μ΄ν°λ² μ΄μ€ ν
μ΄λΈκ³Ό μν°ν° 맀νμ 보λ₯Ό λΉκ΅νμ¬ λ³κ²½ μ¬νλ§ μμ
(κ°λ° μ΄κΈ°, ν μ€νΈ μλ²) - validate : λ°μ΄ν°λ² μ΄μ€ ν μ΄λΈκ³Ό μν°ν° 맀νμ 보λ₯Ό λΉκ΅νμ¬ λ³κ²½ μ¬ν λ°μμ κ²½κ³ λ° μ ν리μΌμ΄μ μ€ν X (ν μ€νΈ μλ², μ€ν μ΄μ§ μλ², μ΄μ μλ²)
- none : μλ μμ± κΈ°λ₯μ μ¬μ© μν μμλ μ ν¨νμ§ μμ κ° μμ±(noneλ μ ν¨νμ§ μμ κ°)
(μ€ν μ΄μ§ μλ², μ΄μ μλ²)
- create : κΈ°μ‘΄ ν
μ΄λΈ μμ ν μλ‘ μμ±
- valueμλ λ€μκ³Ό κ°μ μ΅μ
λ€μ΄ λ€μ΄κ°
-
<propery name="hibernate.show_sql" value="true" />
μ°Έκ³ λ‘ ν΄λΉ μμ±μ μ§μ νλ©΄ μ½μμ μ€νλλ DDLμ μΆλ ₯
-
<propery name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImproveNamingStrategy" />
μ°Έκ³ λ‘ λ€μκ³Ό κ°μ μμ±μ μ¬μ©νλ©° ν μ΄λΈ λͺ νΉμ μ»¬λΌ λͺ μ΄ μλ΅λλ©΄ μΉ΄λ© μΌμ΄μ€λ₯Ό μΈλμ€μ½μ΄ μΌμ΄μ€λ‘ 맀ν
-
컬λΌμ λ€μκ³Ό κ°μ΄ μ μ½μ‘°κ±΄μ μΆκ°ν μ μμ
// not null, κΈΈμ΄ = 10 @Column(name="NAME", nullable = false, length = 10) private String userName;
-
@Table
μuniqueConstraints
μμ±μ μ¬μ©νλ©΄ μ λν¬ μ μ½μ‘°κ±΄μ μΆκ°ν μ μμ@Table(name="MEMBER", uniqueConstrains = {@UniqueConstraint( name = "NAME_AGE_UNIQUE", columnNames = {"NAME", "AGE"} )})
-
ν΄λΉ κΈ°λ₯λ€μ DDLμ μλμΌλ‘ μμ±ν λλ§ μ¬μ©λλ©° JPAμ μ€ν λ‘μ§μλ μν₯μ μ£Όμ§ μμ
-
JPAκ° μ 곡νλ λ°μ΄ν°λ² μ΄μ€ κΈ°λ³Έ ν€ μμ± μ λ΅μ λ€μκ³Ό κ°μ
-
μ§μ ν λΉ : κΈ°λ³Έ ν€λ₯Ό μ ν리μΌμ΄μ μμ μ§μ ν λΉ
@Id
μ μ© κ°λ₯ μλ° νμ- κΈ°λ³Έν, λνΌν
- String
- java.util.Date
- java.sql.Date
- java.math.BigDecimal
- java.math.BigInteger
κΈ°λ³Έ ν€ μ§μ ν λΉ μ λ΅μ
em.persist()
λ‘ μν°ν°λ₯Ό μ μ₯νκΈ° μ μ ν리μΌμ΄μ μμ κΈ°λ³Έ ν€λ₯Ό μ§μ ν λΉ -
μλ μμ± : λ리 ν€ μ¬μ© λ°©μ
ν€ μμ± μ λ΅μ΄ λ€μν μ΄μ λ λ°μ΄ν°λ² μ΄μ€ λ²€λλ§λ€ μ§μνλ λ°©μμ΄ λ€λ₯΄κΈ° λλ¬Έ
ex) μ€λΌν΄ - μνΈμ€ μ 곡 , MySQL - μνΈμ€ λ―Έμ 곡μλ μμ± μ λ΅μ μ¬μ©μμ
@GeneratedValue
λ₯Ό μΆκ°νκ³ μνλ ν€ μμ± μ λ΅ μ ν
μ΄λ, persistence.xmlμhibernate.id.new_generator_mappings=true
λΌλ μμ±μ λ°λμ μΆκ°-
IDENTITY : κΈ°λ³Έ ν€ μμ±μ λ°μ΄ν°λ² μ΄μ€μ μμ
μ£Όλ‘ MySQL, PostgreSQL, SQL Server, DB2μμ μ¬μ©
λ°μ΄ν°λ₯Ό INSERTν λ€μ κΈ°λ³Έ ν€ κ°μ μ‘°ν κ°λ₯νλ―λ‘ μΆκ°μ μΈ λ°μ΄ν°λ² μ΄μ€ μ‘°νκ° νμ
νμ§λ§ νμ΄λ²λ€μ΄νΈμμλStatement.getGeneratedKeys()
λ₯Ό μ¬μ©νμ¬ μ μ₯κ³Ό λμμ κΈ°λ³Έ κΈ° κ°μ κ°μ Έμ΄μν°ν°κ° μμ μνκ° λλ €λ©΄ μλ³μ κ°μ κ°μ§κ³ μμ΄μΌνλλ°, ν΄λΉ μ λ΅μ λ°μ΄ν°λ² μ΄μ€λ₯Ό νλ² κ±°μ³ μλ³μ κ°μ μμμ¬ μ μμΌλ―λ‘ 'νΈλμμ μ μ§μνλ μ°κΈ° μ§μ°'μ΄ λμνμ§ μμ
-
SEQUENCE : λ°μ΄ν°λ² μ΄μ€ μνΈμ€λ₯Ό μ¬μ©νμ¬ κΈ°λ³Έ ν€λ₯Ό ν λΉ
μνΈμ€λ μ μΌν κ°μ μμλλ‘ μμ±νλ νΉλ³ν λ°μ΄ν°λ² μ΄μ€ μ€λΈμ νΈ, ν΄λΉ μ λ΅μ μ΄ μ€λΈμ νΈλ₯Ό μ¬μ©νμ¬ κΈ°λ³Έ ν€ μμ±(Oracle, PostgreSQL, DB2, H2)
@SequenceGenerator
λ₯Ό μ¬μ©νμ¬ μνΈμ€ μμ± κ°λ₯λ°μ΄ν°λ² μ΄μ€ μνΈμ€λ₯Ό ν΅ν΄ μλ³μλ₯Ό μ‘°ννλ μΆκ° μμ μ΄ νμ, λ°λΌμ 2λ² ν΅μ
- μλ³μλ₯Ό ꡬνκΈ° μν΄ λ°μ΄ν°λ² μ΄μ€ μνΈμ€λ₯Ό μ‘°ν
- μ‘°νν μνΈμ€λ₯Ό κΈ°λ³Έν€ κ°μΌλ‘ μ¬μ©νμ¬ λ°μ΄ν° μ μ₯
JPAμμλ μνμ€μ μ κ·Όνλ νμλ₯Ό μ€μ΄κΈ° μν΄
@SequenceGenerator.allocationSize
λ₯Ό μ¬μ©
μ΄ κ°μ μ μ₯νμ¬ νλ²μ μνΈμ€ κ°μ μ¦κ° μν€κ³ ν΄λΉ λ©λͺ¨λ¦¬μ μνμ€ κ°μ ν λΉ -
TABLE : ν€ μμ± ν μ΄λΈ μ¬μ©
ν€ μμ± μ μ© ν μ΄λΈμ λ§λ€κ³ μ΄κ³³μ μ΄λ¦κ³Ό κ°μΌλ‘ μ¬μ©ν 컬λΌμ λ§λ€μ΄ λ°μ΄ν°λ² μ΄μ€ μνμ€λ₯Ό νλ΄λ΄λ μ λ΅, μ΄λ ν μ΄λΈμ μ¬μ©νλ λͺ¨λ λ°μ΄ν°λ² μ΄μ€μ μ μ© κ°λ₯
-
AUTO : λ°μ΄ν°λ² μ΄μ€ λ°©μΈμ λ°λΌ κΈ°λ³Έ ν€λ₯Ό μμ±
μ€λΌν΄ - SEQUENCE, MySQL - IDENTITY
λ°μ΄ν°λ² μ΄μ€λ₯Ό λ³κ²½ν΄λ μ½λλ₯Ό μμ ν νμκ° μμ
-
-
-
κΆμ₯ μλ³μ μ ν μ λ΅
- μμ° ν€ : λΉμ§λμ€μ μλ―Έκ° μλ ν€(μ£Όλ―Όλ²νΈ, μ νλ²νΈ)
- λ리 ν€ : λΉμ§λμ€μ κ΄λ ¨ μλ μμλ‘ λ§λ€μ΄μ§ ν€(μνμ€, auto_increment)
- μμ° ν€ λ³΄λ€λ λ리 ν€ κΆμ₯
- μ νλ²νΈλ‘ ν€κ° μ μ λλ©΄ μ νλ²νΈκ° μμ΄μ§ μλ μκ³ λ³κ²½λ κ²½μ°κ° λ€λΆ
- λΉμ§λμ€ νκ²½μ μΈμ λ λ°λ μνμ΄ λλ
- JPAμλ λͺ¨λ μν°ν°μ μΌκ΄λ λ°©μμΌλ‘ λ리 ν€ μ¬μ©μ κΆμ₯
- μλ΅