Tôi đang trong quá trình tối ưu hóa một thuật toán, và tôi nhận thấy rằng Hibernate tạo và phát hành các câu lệnh cập nhật lặp đi lặp lại thay vì sử dụng lại chúng. Đây là tất cả từ cùng một truy vấn.Spring Hibernate, tránh các câu lệnh đăng ký và đóng lặp lại
15:57:31,589 TRACE [.JdbcCoordinatorImpl]:371 - Registering statement [sql : 'update ...
15:57:31,591 TRACE [.JdbcCoordinatorImpl]:412 - Releasing statement [sql : 'update ...
15:57:31,592 TRACE [.JdbcCoordinatorImpl]:525 - Closing prepared statement [sql : 'update ...
15:57:31,592 TRACE [.JdbcCoordinatorImpl]:278 - Starting after statement execution processing [ON_CLOSE]
15:57:31,594 TRACE [.JdbcCoordinatorImpl]:371 - Registering statement [sql : 'update ...
15:57:31,595 TRACE [.JdbcCoordinatorImpl]:412 - Releasing statement [sql : 'update ...
15:57:31,596 TRACE [.JdbcCoordinatorImpl]:525 - Closing prepared statement [sql : 'update ...
15:57:31,596 TRACE [.JdbcCoordinatorImpl]:278 - Starting after statement execution processing [ON_CLOSE]
15:57:31,597 TRACE [.JdbcCoordinatorImpl]:371 - Registering statement [sql : 'update ...
15:57:31,599 TRACE [.JdbcCoordinatorImpl]:412 - Releasing statement [sql : 'update ...
15:57:31,600 TRACE [.JdbcCoordinatorImpl]:525 - Closing prepared statement [sql : 'update ...
15:57:31,601 TRACE [.JdbcCoordinatorImpl]:278 - Starting after statement execution processing [ON_CLOSE]
Phương pháp chính của thuật toán có chú thích @Scope
và @Transactional
. Hành vi mong đợi là, nếu có gì sai, các bản cập nhật của thuật toán là ROLLBACK
.
Bên dưới, thuật toán sử dụng @Service
có một số khác nhau @Scope
và cũng là @Transactional
. Dịch vụ này là dịch vụ sử dụng Hibernate để cập nhật cơ sở dữ liệu, với session.update(entity)
. Tài liệu nói rằng, theo mặc định, các giao dịch lồng nhau sử dụng lại giao dịch nếu nó tồn tại.
- Xác nhận đó có chính xác không?
- Thay đổi phạm vi có thể tạo ra sự cố không?
- Làm cách nào tôi có thể sử dụng lại Hibernate tuyên bố trong giao dịch?
Cám ơn sự quan tâm của bạn