Một lỗi nhỏ mà mình từng mất kha khá thời gian debug.
Vấn đề
Khi dùng EntityManager.merge() để lưu một entity mới, nhiều người có thói quen gọi:
| |
Và… id không có giá trị như mong đợi.
Nguyên nhân
merge() không update object bạn truyền vào. Nó copy state từ object đó sang một managed instance mới rồi trả về instance đó. Object gốc vẫn ở trạng thái detached, không được Hibernate gán ID.
Cách đúng
Dùng object trả về từ merge():
| |
Đơn giản vậy thôi. Khác với persist() — cái đó modify trực tiếp object truyền vào nên không có vấn đề này.