Tôi hiện đang làm việc trên một ứng dụng sử dụng Spring Boot và Spring Data (giao diện JpaRepository
chính xác) cùng với Hibernate. Một điều tôi thích về Hiberante là tính năng lưu trữ của nó - khi bạn gửi nhiều truy vấn phù hợp với một đối tượng cụ thể, bạn sẽ lấy lại cùng một cá thể của đối tượng đó trên mọi truy vấn thực thi (đối với toán tử == của Java). Tuy nhiên, khi sử dụng dữ liệu Spring và các lớp JpaRepository
, điều này không phải lúc nào cũng đúng. Vì lý do đó, tôi giả định rằng có nhiều trường hợp HibernateSession
tại nơi làm việc tại đây.Spring Boot & Spring Dữ liệu: phiên Hibernate được quản lý như thế nào?
Do đó, câu hỏi của tôi là: Dữ liệu mùa xuân xử lý phiên Hibernate như thế nào? Khi nào nó mở hoặc đóng chúng? Có cách nào để cấu hình nó để sử dụng cùng một phiên cho toàn bộ thời gian chạy của ứng dụng của tôi để sử dụng đầy đủ bộ nhớ cache đối tượng của Hibernate? Có lý do nào không không để thực hiện theo cách đó?
Cảm ơn,
Alan
Thực ra điều đó không đúng ... Tùy thuộc vào việc phân định giao dịch của bạn, bạn sẽ sử dụng lại phiên đã được mở. Nếu bạn có một phương thức dịch vụ được chú thích bằng '@ Transactional' (và đã thiết lập đúng hỗ trợ tx) thì Spring sẽ mở một' Session'/'EntityManager' và sử dụng lại nó cho tất cả các cuộc gọi db bạn thực hiện bên trong giao dịch đó. Ngoài ra, cần lưu ý rằng lớp dịch vụ của bạn phải là lớp giao tác KHÔNG phải lớp truy cập dữ liệu của bạn. –
Cảm ơn bạn đã làm rõ. Điều này là tốt để biết. – Alan47