JPA Fundamentals

ORM & impedance, EntityManager/JPQL, @Entity mapping (@Id, @Column, @Enumerated, @Embeddable), lifecycle & equals/hashCode.

7 bài · ~69 phútMiễn phí

Nội dung

Danh sách bài học

  1. 01

    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.

    ~4 phút
  2. 02

    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.

    ~12 phút
  3. 03

    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.

    ~12 phút
  4. 04

    @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.

    ~13 phút
  5. 05

    @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.

    ~12 phút
  6. 06

    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.

    ~12 phút
  7. 07

    JPA Fundamentals — tổng kết

    Tóm tắt JPA Fundamentals.

    ~4 phút