Spring 13/07/2026 7 phút

Đọc thì đừng lấy cả entity — và vì sao entity làm DTO của API là rò rỉ dữ liệu trong im lặng

Projection như xin cô lễ tân một tờ phiếu ghi đúng vài trường bạn cần; entity như rút cả bộ hồ sơ sống ra khỏi tủ — ghi chú lên nó là tự động được lưu lại, nó nối sang hồ sơ khác, và nặng gấp đôi. Ba cách projection, và vì sao đừng đưa hồ sơ cho người ngoài.

Spring 11/07/2026 8 phút

Số dư -100 là bằng chứng khoá CHẠY ĐÚNG, số dư 0 mới là lỗi — ba cách xử lý hai luồng cùng rút tiền

Hai người cùng sửa một trang sổ cái: khoá bi quan là khoá sổ vào ngăn kéo với cây bút duy nhất; khoá lạc quan là photocopy trang rồi bị từ chối nếu phiên bản đã đổi. Đo ba cách, và vì sao con số trông an toàn hơn lại là con số sai.

Spring 09/07/2026 8 phút

@Transactional: tự gọi thì vô hiệu, checked exception vẫn commit, readOnly nuốt thay đổi — ba cái bẫy im lặng

@Transactional như một buồng đệm hai cửa: mọi thứ bên trong hoặc cùng qua cửa (commit) hoặc bị đẩy ngược lại (rollback). Nhưng buồng đệm gắn ở CỬA, nên tự gọi thì không đi qua nó; checked exception mặc định vẫn commit; readOnly âm thầm nuốt thay đổi.

Spring 08/07/2026 7 phút

LazyInitializationException là tấm phiếu chỉ đổi được khi quầy chưa đóng — và vì sao OSIV giấu nó đi là một món nợ

Quan hệ lazy như tấm phiếu chỉ đổi được tại quầy đang mở (session); giao dịch đóng là quầy đóng, phiếu thành vô giá trị. OSIV giữ quầy mở cả buổi để che lỗi — đổi lại N+1 lúc render và kết nối bị giữ. Cách sửa đúng.