Nội dung
Danh sách bài học
- 01~4 phút
Relationships & Transactions — tổng quan
Module này mổ 2 chủ đề khó nhất JPA: quan hệ entity (fetch, N+1) và transaction (proxy, propagation).
- 02~14 phút
Associations & Fetch Type — @OneToMany, @ManyToOne, LAZY/EAGER, LazyInitializationException
Bài này bóc 4 kiểu association JPA, cơ chế owning side vs inverse side (FK nằm ở đâu trong schema), fetch type mặc định của từng annotation và lý do nên override về LAZY, cùng LazyInitializationException khi truy cập proxy ngoài transaction.
- 03~14 phút
Cascade & N+1 — propagation, orphanRemoval và bug hiệu năng nguy hiểm nhất JPA
Cascade type lan truyền operation từ entity cha xuống entity con; orphanRemoval xoá entity con khi tách khỏi collection. N+1 problem xảy ra khi lazy load collection trong vòng lặp — 100 project × 1 query tasks = 101 query thay vì 1. Bài này giải thích cơ chế vì sao xảy ra và 4 cách fix (JOIN FETCH, EntityGraph, batch size, DTO projection).
- 04~12 phút
@Transactional & AOP proxy — cơ chế begin/commit/rollback bên dưới
@Transactional không magic — Spring tạo CGLIB proxy wrap method để chèn begin/commit/rollback. Bài này bóc đúng một concept: proxy hoạt động thế nào, rollback rule RuntimeException vs checked, và self-invocation bypass proxy — pitfall kinh điển khiến @Transactional mất tác dụng im lặng.
- 05~13 phút
Propagation, Isolation & readOnly — kiểm soát transaction boundary
Ba thuộc tính @Transactional quan trọng nhất sau khi đã hiểu AOP proxy: propagation (REQUIRED vs REQUIRES_NEW — B chạy trong T1 hay mở T2 riêng?), isolation level (READ_COMMITTED ngăn dirty read; REPEATABLE_READ ngăn non-repeatable; SERIALIZABLE ngăn phantom), và readOnly hint tắt dirty checking để tăng hiệu năng read endpoint.
- 06~4 phút
Relationships & Transactions — tổng kết
Tóm tắt Relationships & Transactions.