Β @OneToMany λ±μ μ΄λ Έν μ΄μ μ μ¬μ©ν λ, CascadeType μ μ€μ νλ κ²μ μμ£Ό 보μμ κ²μ΄λ€.
Β κΈ°λ³Έμ μΌλ‘ 1:N μ΄μμ μ°κ΄κ΄κ³μΌ λ, μ°κ΄κ΄κ³μ μλ ν μν°ν° νλμ λ³νκ° λ€λ₯Έ μν°ν° νλμ μν₯μ μ£Όμ§ μλλ€.
Β μλ₯Ό λ€μ΄, κΈκ³Ό λκΈμ μλ‘ 1:N μ°κ΄κ΄κ³μ΄λ€.
μ΄ κ²½μ°, 1λ² κΈμ λκΈμ μ¬λ¬ κ° μμ±νκ³ 1λ² κΈμ μμ νλ €κ³ νλ©΄ μλ¬κ° λ°μνλ€. μ΄λ λκΈλ€μ΄ 1λ² κΈμ λν μΈλν€λ₯Ό κ°μ§κ³ μκΈ° λλ¬Έμ΄λ€.
Β Cascadeλ₯Ό νμ©νλ©΄, 1:1μ΄ μλ λ€μν κ΄κ³μμλ ν μν°ν°μ λ³νμ λ°λ₯Έ λ€λ₯Έ μν°ν°μ λ³νλ₯Ό μ€μ ν΄μ€ μ μλ€.
JPA μμ μν°ν° κ°μ μ°κ΄ κ΄κ³λ₯Ό λ€λ£° λ μ¬μ©CascadeType μ νκ°@OneToMany(mappedBy = "question", cascade = CascadeType.All) // μ°κ΄ κ΄κ³μ μ£ΌμΈμ question λ³μλ‘ μ μ₯λ νλ, λͺ¨λ μν μ μ΄ νκ°
private List<Answer> answerList;
@OneToMany(mappedBy = "question", cascade = CascadeType.PERSIST // λΆλͺ¨ μν°ν°κ° EntityMangerλ₯Ό ν΅ν΄ μμμ± μ»¨ν
μ€νΈμ persist νλ©΄, μμ μν°ν°λ ν¨κ» persist
private List<Answer> answerList;
Question question = new Question();
Answer answer = new Answer();
question.addAnswer(answer); // μλ μμμ± μ»¨ν
μ€νΈμ μ μ₯λμ§ μμ
entityManager.persist(question); // DBμ μ μ₯
@OneToMany(mappedBy = "question", cascade = CascadeType.MERGE
private List<Answer> answerList;
Question question = entityManager.find(Question.class, 1L) // μ΄ μμ μ μμν
question.setContent("new content");
Answer answer = new Answer(); // λΉμμ κ°μ²΄
answer.setContent("answer content");
question.addAnswer(answer);
entityManager.merge(question); // λΆλͺ¨, μμ μν°ν° λͺ¨λ λ³ν©
@OneToMany(mappedBy = "question", cascade = CascadeType.REMOVE
private List<Answer> answerList;
Question question = entityManager.find(Question.class, 1L)
entityManger.remove(question); // λΆλͺ¨, μμ μν°ν° λͺ¨λ μμ
@OneToMany(mappedBy = "question", cascade = CascadeType.REFRESH)
private List<Answer> answerList;
DETACH λ μν°ν°λ₯Ό μ€μμν μν€λ κ²μΌλ‘, entityManger.detach λ @Transcational μμ
μ΄νμ μ μ©λλ€.
Cascadeμ κ²½μ° κΈ°λ³Έκ°μ΄ μλ€. μ¦, μ¬μ©νμ§ μμΌλ©΄ λΉνμ± μνμ΄λ€.
1) λΆλͺ¨-μμ κ΄κ³μ λ°μ΄ν°κ° νμ ν¨κ» κ΄λ¦¬λμ΄μΌ ν λ
2) μ½λμ κ°κ²°μ±κ³Ό μ μ§λ³΄μμ±μ λμΌ λ
Cascade λ₯Ό μ¬μ©νλ©΄ λΆλͺ¨ μν°ν°λ§ κ΄λ¦¬ν΄λ μμ μν°ν°μ μλͺ
μ£ΌκΈ°λ₯Ό μλμΌλ‘ μ²λ¦¬ν μ μμ3) λ§μ§ μμ λ°μ΄ν°λ₯Ό λ€λ£° λ
Cascade λ‘ μΈν΄ μ±λ₯ λ¬Έμ κ° λ°μν μ μμRepository λ±μ μ΄μ©ν΄μ κ΄λ¦¬1) μ₯μ
2) λ¨μ
Cascade λ‘ μΈν μλ¬λ λλ²κΉ
μ ν΅ν΄ μΆμ νκΈ° μ΄λ €μΈ μ μμ
- ν΄λΉ λ΄μ©μ νμκ° λλΌκΈ°μ μ λ§ λ§€μ°λ§€μ° ν·κ°λ¦¬κ³ μ€μν λ΄μ©
- λ°λ³΅μ μΈ νμ΅μ ν΅ν΄ νμ€ν μκ³ κ°μ
persist μ μν΄ μμμ± μ»¨ν
μ€νΈμ λ³νκ° λ°μνλλΌλ, νΈλμμ
λ΄μμ rollback μ΄ μνλλ©΄ DB μ λ°μ΄ν°λ λ³νμ§ μμ@Transactional μ κ²½μ°, 맨 λ§μ§λ§ commit λ λ μμμ± μ»¨ν
μ€νΈ λ΄μ μν°ν°λ€μ΄ μλμΌλ‘ flush λμ΄ DB μ μ μ₯cascade μ΅μ
μΌλ‘ μ§μ λ νλμ λ³νκ° μκΈ°λλΌλ commit μ΄μ μλ DB λ°μ΄ν°μ λ³νκ° μμCascadeType.PERSIST λ λΆλͺ¨ μν°ν°μ μμ μν°ν° μ¬μ΄ μ°κ΄κ΄κ³κ° μ‘΄μ¬ν λ μλCascadeType.PERSIST κ° μ€μ λ κ²½μ°, λΆλͺ¨ μν°ν°κ° μμν νλ μμ μ μμ μν°ν°λ μλμΌλ‘ μμνβCascadeType.PERSIST μ μ© μν
@Transactional
public void doMethod() {
Question question = new Question(); // νμ¬ λΉμμ μν
Answer answer1 = new Answer(); // νμ¬ λΉμμ μν
Answer answer2 = new Answer(); // νμ¬ λΉμμ μν
// addAnswer λ©μλλ μΏΌλ¦¬λ‘ μ°κ²°λμ§ μμ, λ¨μν λ©λͺ¨λ¦¬μμ Listμ Answer κ°μ²΄λ₯Ό λνλ μμ
question.addAnswer(answer1); // μμ§ μμμ± μ»¨ν
μ€νΈμ μ μ₯ X
question.addAnswer(answer2); // μμ§ μμμ± μ»¨ν
μ€νΈμ μ μ₯ X
// νΈλμμ
μ»€λ° μμ μ μμν κ²°μ
}
νΈλμμ μ μ»€λ° μ΄μ μλ λͺ¨λ κ°μ²΄κ° μ λΆ λ€ λΉμμ μν
νΈλμμ μ»€λ° μμ
persistκ° μ μ©λμ§ μμκ³ ,Questionκ³ΌAnswerκ° μ°κ΄κ΄κ³κ° μλ λ
questionκ³Όanswer1,answer2λͺ¨λ μμν λμ§ μμpersistκ° μ μ©λμ§ μμκ³ ,Questionκ³ΌAnswerλ μ°κ΄κ΄κ³μ΄λ©°,Answerκ° μ°κ΄κ΄κ³μ μ£ΌμΈμΌ λ
questionμ μμνλμ§λ§,answer1κ³Όanswer2λ μμνλμ§ μμ- μ°κ΄κ΄κ³μΌ κ²½μ°, λΆλͺ¨ μν°ν°λ μμν
persistκ° μ μ©λκ³ ,Questionκ³ΌAnswerκ° μ°κ΄κ΄κ³κ° μλ λ
questionμ μμνλμ§λ§,answer1κ³Όanswer2λ μμνλμ§ μμpersistκ° μ μ©λ λΆλͺ¨ μν°ν°λ μμνpersistκ° μ μ©λκ³ ,Questionκ³ΌAnswerκ° μ°κ΄κ΄κ³μΌ λ
question,answer1,answer2κ° λͺ¨λ μμν
DB μ λ°μ 곡λΆνλ©° μ 리λ₯Ό νλ€λ³΄λ ν·κ°λ¦¬κ³ λͺ¨λ₯΄λ λΆλΆμ΄ λ무 λ§μλ€.
Β νΉν μμμ± μ»¨ν
μ€νΈμ μμν, μ€μμν λ±μ κ°λ
μ λν΄ κ³μ νΌλμ΄ μμ ν루μ’
μΌ μ°Ύμλ³Έ κ² κ°λ€.
μ°κ΄λ λ΄μ©μ΄ λ§λ€λ³΄λ λ΄κ° μ§κΈ μμμ± μ»¨ν
μ€νΈλ₯Ό μ 리νλ 건μ§, cascadeλ₯Ό μ 리νλκ±΄μ§ λͺ¨λ₯΄κ² λ€..
λ°°μ΄ λ΄μ©μ μμ΄λ²λ¦¬κΈ° μ μ, λΉ λ₯Έ μμΌ λ΄μ νμ΅ν μμμ± μ»¨ν
μ€νΈμ κ΄ν λ΄μ©μ λΈλ‘κ·Έμ μ 리νλλ‘ ν΄μΌκ² λ€.

Β π΅βπ« μ΄ ν λ²μ ν¬μ€ν μ 리λ₯Ό μν΄ μ§λ¬Έν΄κ°λ©° νμ΅ν λ΄μ©μ μ€ν¬λ‘€..
μ°Έκ³ ) OpenAI. (2024).ChatGPT(4o)[Large language model].https://chatgpt.com/