2012-07-02 39 views

Trả lời

5

Quá trình đồng bộ hóa trạng thái kết nối JDBC với trạng thái của các đối tượng được giữ trong bộ nhớ được gọi là tuôn ra.

này xảy ra ở những điểm sau đây tùy thuộc vào các thiết lập FlushMode:

  • trước một số hành truy vấn khi FlushMode.AUTO (Đây là mặc định).
  • từ org.hibernate.Transaction.commit() khi FlushMode.COMMIT
  • từ Session.Flush()

Sự khác biệt chính là khi FlushMode được thiết lập để COMMIT, cam kết() flushes phiên và cũng kết thúc đơn vị công việc và bạn không thể khôi phục lại giao dịch khi mà flush() chỉ là một đồng bộ hóa bình thường của phiên làm việc.

FlushMode

More info

1

Từ Hibernate docs

Flushing là quá trình đồng bộ hóa các cửa hàng khăng khăng tiềm ẩn với nhà nước persistable giữ trong bộ nhớ.

Tuyên bố trên sẽ gây nhầm lẫn cho một số người có thể nhận được câu hỏi tiếp theo (nghĩa là phát hiện khác biệt sau khi đọc câu nói trên).

Tuôn ra giống như thực sự thực thi câu lệnh nhưng không cam kết. Ví dụ: - bạn mở bất kỳ công cụ thực thi sql nào như oracle SQLdeveloper, mở một phiên và báo cáo cập nhật lửa. Mở phiên sql mới, bạn sẽ không thấy cập nhật cho đến khi và trừ khi bạn cam kết trong phiên đầu tiên. Vì vậy, truy vấn đã được thực hiện trong phiên oracle cụ thể nhưng không cam kết.

Khi bạn gọi lưu (hoặc cập nhật) hibernate, nó không có nghĩa là truy vấn cơ bản được thực hiện cùng một lúc. Nó thường thực hiện khi cam kết được thực hiện một cách rõ ràng hoặc kết thúc giao dịch. Nhưng có những tình huống (như để có một ID được gán cho đối tượng tạm thời, để kiểm soát kích thước của phiên ngủ đông như trong các cập nhật hàng loạt nếu không bạn có thể thoát khỏi ngoại lệ mem), nơi bạn muốn thực hiện truy vấn nhưng không thực hiện nó. Flush giúp đây

+0

Vì vậy, tuôn ra giống như thực hiện một tuyên bố với tự động cam kết sai? –

+0

Có chính xác bạn đã đúng. –

Các vấn đề liên quan