Tại sao khi sử dụng @Transactional thì Jpa lại sinh ra câu lệnh update ở các entity sử dụng get.
Hi anh/em, em mới học Spring Boot được 1 thời gian và đang gặp case như này. Mình có đoạn code như ảnh
Hàm này đơn giản chỉ để update đối tượng cashin online, sẽ chẳng có gì nói nếu như Jpa không tự sinh câu lệnh update User.
đây là đoạn update cashin
đây là đoạn mình log ra jpa tự sinh câu lệnh sql update user
Sau khoảng 2 ngày tìm hiểu và thử các cách như:
- tắt spring.jpa.open-in-view
- Sử dụng các loại probation, isolution của Transaction
thì vẫn không được, chỉ còn mỗi cách là bỏ Transactional đi, nhưng nếu bỏ đi thì các hàm khác có logic phức tạp hơn cần sử dụng để rollback mình chưa có cách giải quyết nào
Mong các cao nhân giải thích và có thể đưa cho em lời khuyên với case này với, cảm ơn mọi người rất nhiều 😅
1 ANSWERS
Giữa 2 class User và Cashin hiện có mối quan hệ @ManyToOne, @OneToMany... không? nếu có hãy check xem cascade nhé
hi bác, giữa các class em đang không để quan hệ hay trigger gì hết 😄
Với tình trạng này thì ngoài hiểu biết của mình. Bạn có thể thử DI 1 repository khác vào chính function đó và thử get 1 by Id 1 dữ liệu bất kỳ xem nó có tự động tạo update entity như thằng user không.
Cậu thử log thông tin User ở các mốc: 1/ Sau khi getUserById từ repo 2/ Trước khi update cashinOnline 3/ Sau khi update cashinOnline Xem thông tin object user có same ở cả 3 mốc ko?