Nội dung
Danh sách bài học
- 01~4 phút
JPA Fundamentals — tổng quan
Module nền tảng JPA: từ bài toán ORM, EntityManager/JPQL, tới cách map entity sang table và pitfall equals/hashCode.
- 02~12 phút
ORM & Impedance Mismatch — tại sao ánh xạ object sang table không bao giờ hoàn hảo
ORM (Object-Relational Mapping) giải quyết boilerplate JDBC bằng cách tự động ánh xạ Java object sang SQL table. Nhưng object world và relational world có 5 khác biệt cấu trúc gọi là impedance mismatch — chính là nguồn gốc mọi bug subtle trong JPA: LazyInitializationException, N+1 query, equals/hashCode không nhất quán. Bài này bóc tại sao ORM tồn tại, 3 layer abstraction (JPA spec / Hibernate impl / Spring Data), và 5 mismatch cùng cơ chế ORM giải quyết.
- 03~12 phút
EntityManager, JPQL & Spring Data — từ boilerplate tới interface thuần túy
EntityManager là core API của JPA quản lý vòng đời entity và persistence context. JPQL query entity thay vì table. Spring Data JPA sinh repository implementation tại runtime để bỏ hết boilerplate EntityManager. ddl-auto quyết định ai kiểm soát schema.
- 04~13 phút
@Entity & @Id — yêu cầu POJO và chiến lược sinh ID
Bóc tách đúng 2 câu hỏi atomic: tại sao @Entity yêu cầu mutable POJO (không phải record), và ba chiến lược @GeneratedValue — IDENTITY/SEQUENCE/UUID v7 — khác nhau ra sao ở mức Hibernate batching.
- 05~12 phút
@Column, @Enumerated và @Embeddable — tinh chỉnh cột, ánh xạ enum, value object inline
Ba annotation bổ trợ quan trọng nhất khi mapping entity: @Column customization, naming strategy camelCase→snake_case, @Enumerated luôn dùng STRING (ORDINAL corrupt khi reorder), và @Embeddable để nhúng value object Money/Address vào cùng table mà không cần JOIN.
- 06~12 phút
Entity lifecycle & equals/hashCode — @PrePersist, @PostLoad, và pitfall Lombok @Data
JPA entity sống qua 4 trạng thái (transient, managed, detached, removed). Bài này giải thích 7 lifecycle callback, tại sao equals/hashCode khó khi ID có thể null, và vì sao Lombok @Data phá vỡ entity trong Set/Map.
- 07~4 phút
JPA Fundamentals — tổng kết
Tóm tắt JPA Fundamentals.