Asked Oct 20th, 2022 10:35 a.m. 147 1 1
  • 147 1 1
0

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.

Share
  • 147 1 1

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 image.png 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 image.png đây là đoạn mình log ra jpa tự sinh câu lệnh sql update user image.png


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


Answered Oct 24th, 2022 2:31 a.m.
Accepted
0

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é

Share
Oct 25th, 2022 6:54 a.m.

hi bác, giữa các class em đang không để quan hệ hay trigger gì hết 😄

0
| Reply
Share
Oct 26th, 2022 2:30 a.m.

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.

0
| Reply
Share
Oct 31st, 2022 8:10 a.m.

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?

0
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.