Bối cảnh Kiên trì là gì?


109

Tôi chưa quen với thế giới Java và JPA. Tôi đang nghiên cứu JPA và bắt gặp nhiều thuật ngữ mới như Thực thể, sự bền bỉ. Trong khi đọc, tôi không thể hiểu định nghĩa chính xác cho Ngữ cảnh Kiên trì .

Bất cứ ai có thể giải thích nó trong thuật ngữ giáo dân đơn giản? Nó phải làm gì với dữ liệu được sử dụng trong @Entity?

Ví dụ: tôi thấy định nghĩa này quá phức tạp để hiểu:

Bối cảnh liên tục là một tập hợp các thực thể sao cho bất kỳ danh tính liên tục nào đều có một cá thể thực thể duy nhất.

Câu trả lời:


86

Một ngữ cảnh liên tục xử lý một tập hợp các thực thể giữ dữ liệu được duy trì trong một số lưu trữ liên tục (ví dụ: cơ sở dữ liệu). Đặc biệt, ngữ cảnh nhận thức được các trạng thái khác nhau mà một thực thể có thể có (ví dụ: được quản lý, tách rời) liên quan đến cả ngữ cảnh và kho lưu trữ liên tục cơ bản.

Mặc dù liên quan đến Hibernate (một nhà cung cấp JPA), tôi nghĩ rằng các liên kết này hữu ích:

http://docs.jboss.org/hibernate/core/4.0/devguide/en-US/html/ch03.html

http://docs.jboss.org/hibernate/entitymanager/3.5/reference/en/html/architecture.html

Trong Java EE, ngữ cảnh liên tục thường được truy cập thông qua EntityManager.

http://docs.oracle.com/javaee/6/api/javax/persistence/EntityManager.html

Các trạng thái khác nhau mà một thực thể có thể có và sự chuyển đổi giữa các trạng thái này được mô tả dưới đây:

http://docs.jboss.org/hibernate/entitymanager/3.6/reference/en/html/objectstate.html

http://gerrydevstory.com/wp-content/uploads/2012/05/jpa-state-transtition.png


hmmm, bây giờ nó có ý nghĩa. Bạn có định nghĩa "Đơn giản" tương tự cho biết sự khác biệt giữa Người quản lý đối tượng do ứng dụng quản lý và vùng chứa không?
Amrit

4
container và ứng dụng về cơ bản chỉ cho biết nơi Trình quản lý thực thể được tạo - bên ngoài trong vùng chứa hoặc bên trong, trong ứng dụng.
uiron

66
  1. Các thực thể được quản lý bởi cá thể javax.persistence.EntityManager bằng cách sử dụng ngữ cảnh liên tục.
  2. Mỗi cá thể EntityManager được liên kết với một ngữ cảnh tồn tại .
  3. Trong bối cảnh tồn tại , các cá thể thực thể và vòng đời của chúng được quản lý.
  4. Bối cảnh tồn tại xác định một phạm vi mà theo đó các cá thể thực thể cụ thể được tạo, tồn tại và xóa.
  5. Một bối cảnh kiên trì giống như một bộ nhớ cache trong đó có chứa một tập hợp các thực thể dai dẳng , Vì vậy, một khi giao dịch kết thúc , tất cả các đối tượng liên tục được tách ra khỏi bối cảnh kiên trì của EntityManager và được quản lý không còn.

1
Tôi thấy rằng EclipseLink không cửa sổ mới các đơn vị sau khi giao dịch xong ...
Ray Hulha

Bộ nhớ cache của ngữ cảnh liên tục được quản lý vùng chứa sẽ chỉ còn lại trong thời gian của giao dịch. Các thực thể được đọc trong một giao dịch sẽ trở nên tách rời sau khi hoàn thành giao dịch và sẽ yêu cầu được hợp nhất để chỉnh sửa trong các giao dịch tiếp theo. EclipseLink . @RayHulha
pritam kumar

4
@ scamamkumar, bạn đã giải thích rõ về khái niệm bối cảnh bền vững. Tôi chỉ muốn nói thêm rằng cũng có chú thích javax.persistence.PersistenceContext, được sử dụng để đưa vào một đối tượng EntityManager và thiết lập phạm vi của đối tượng được đưa vào (ví dụ: một giao dịch).
Paulo Merson

30

Lấy từ này trang:

Đây là một bảng gian lận nhanh về thế giới JPA:

  • Cache là một bản sao của dữ liệu, nghĩa là sao chép được lấy từ nhưng sống bên ngoài cơ sở dữ liệu.
  • Xả bộ nhớ cache là hành động đưa dữ liệu đã sửa đổi trở lại cơ sở dữ liệu.
  • PersistenceContext về cơ bản là một Cache. Nó cũng có xu hướng có kết nối cơ sở dữ liệu riêng không được chia sẻ.
  • EntityManager đại diện cho một PersistenceContext (và do đó là một Cache)
  • EntityManagerFactory tạo một EntityManager (và do đó là PersistenceContext / Cache)

một PersisnteceContext có thể có bất kỳ phiên bản EntityManager nào không? Và liệu một Entity Manager có thể có bất kỳ PersistenceContext nào không? PersisntenceContext chỉ là một cho tất cả các ứng dụng?
Roberto

7

Một bối cảnh dai dẳng đại diện cho các thực thể mà giữ dữ liệu và có đủ điều kiện để được tiếp tục tồn tại một số lưu trữ liên tục giống như một cơ sở dữ liệu. Khi chúng ta thực hiện commitmột giao dịch trong một phiên có các thực thể này được đính kèm, Hibernate sẽ xóa ngữ cảnh liên tục và các thay đổi ( chèn / lưu, cập nhật hoặc xóa ) trên chúng vẫn được lưu giữ trong bộ nhớ liên tục.


7

Cả org.hibernate.SessionAPI và javax.persistence.EntityManagerAPI đều đại diện cho một ngữ cảnh để xử lý dữ liệu liên tục.

Khái niệm này được gọi là bối cảnh bền bỉ . Dữ liệu liên tục có trạng thái liên quan đến cả ngữ cảnh liên tục và cơ sở dữ liệu bên dưới.


5

"Một tập hợp các cá thể (thực thể) có thể tồn tại được quản lý bởi một cá thể trình quản lý thực thể tại một thời điểm nhất định" được gọi là ngữ cảnh tồn tại.

Chú thích JPA @Entity cho biết một thực thể có thể tồn tại.

Tham khảo Định nghĩa JPA tại đây


4

Theo thuật ngữ giáo dân, chúng ta có thể nói rằng Persistence Context là một môi trường nơi các thực thể được quản lý, tức là nó đồng bộ hóa "Thực thể" với cơ sở dữ liệu.


3

Trong khi @ocityam kumar đưa ra một cái nhìn tổng quan tốt thì điểm thứ 5 không đúng.

Bối cảnh duy trì có thể là Phạm vi giao dịch - Bối cảnh duy trì 'tồn tại' trong thời gian của giao dịch hoặc Mở rộng - Bối cảnh duy trì kéo dài nhiều giao dịch.

https://blogs.oracle.com/carolmcdonald/entry/jpa_caching

EntityManager của JPA và Phiên của Hibernate cung cấp một Bối cảnh bền vững mở rộng.


Xin chào người dùng2771889, Bạn nói đúng, tôi đã không đề cập đến phạm vi mở rộng của ngữ cảnh bền bỉ. Điểm thứ 5 chỉ liên quan đến bối cảnh ổn định trong phạm vi giao dịch.
pritam kumar

2

Persistence Context là một môi trường hoặc bộ đệm ẩn trong đó các cá thể thực thể (có khả năng giữ dữ liệu và do đó có khả năng được duy trì trong cơ sở dữ liệu) được quản lý bởi Entity Manager . Nó đồng bộ hóa thực thể với cơ sở dữ liệu. Tất cả các đối tượng có chú thích @Entity đều có khả năng vẫn tồn tại. @Entity không là gì ngoài một lớp giúp chúng ta tạo các đối tượng để giao tiếp với cơ sở dữ liệu. Và cách các đối tượng giao tiếp là sử dụng các phương thức Và người cung cấp các phương thức đó là Entity Manager.


1
Câu trả lời này khác với các câu trả lời hiện có như thế nào?
Akin Okegbile
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.