Apa itu Konteks Persistensi?


109

Saya baru mengenal dunia Java dan JPA. Saya sedang mempelajari JPA dan menemukan banyak istilah baru seperti Entitas, ketekunan. Saat membaca, saya tidak dapat memahami definisi yang tepat untuk Persistence Context .

Adakah yang bisa menjelaskannya dengan istilah orang awam yang sederhana? Apa hubungannya dengan data yang digunakan di @Entity?

Misalnya, saya merasa definisi ini terlalu rumit untuk dipahami:

Konteks persistensi adalah sekumpulan entitas sehingga untuk setiap identitas persisten ada contoh entitas yang unik.

Jawaban:


86

Konteks persistensi menangani sekumpulan entitas yang menyimpan data untuk disimpan di beberapa penyimpanan persistensi (misalnya database). Secara khusus, konteks mengetahui status berbeda yang dapat dimiliki entitas (misalnya dikelola, terlepas) dalam kaitannya dengan konteks dan penyimpanan persistensi yang mendasarinya.

Meskipun terkait Hibernate (penyedia JPA), saya pikir tautan ini berguna:

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

Di Java EE, konteks persistensi biasanya diakses melalui EntityManager.

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

Berbagai keadaan yang dapat dimiliki entitas dan transisi di antaranya dijelaskan di bawah ini:

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, masuk akal sekarang. Apakah Anda memiliki definisi "Sederhana" serupa yang menjelaskan perbedaan antara Manajer Entitas yang dikelola-kontainer & yang dikelola aplikasi?
Amrit

4
container vs application pada dasarnya memberi tahu di mana Entity Manager dibuat - di luar dalam container, atau di dalam, dalam aplikasi.
uiron

66
  1. Entitas dikelola oleh instance javax.persistence.EntityManager menggunakan konteks persistence.
  2. Setiap EntityManager misalnya dikaitkan dengan sebuah konteks ketekunan .
  3. Dalam konteks persistensi , instance entitas dan siklus hidupnya dikelola.
  4. Konteks persistensi mendefinisikan ruang lingkup di mana instance entitas tertentu dibuat, dipertahankan, dan dihapus.
  5. Sebuah konteks kegigihan seperti Cache yang berisi satu set entitas gigih , Jadi sekali transaksi selesai , semua benda persisten terlepas dari konteks ketekunan EntityManager ini dan dikelola tidak lagi.

1
Saya menemukan bahwa EclipseLink tidak melepaskan entitas setelah transaksi selesai ...
Ray Hulha

Cache konteks persistensi yang dikelola penampung hanya akan tetap ada selama transaksi. Entitas yang dibaca dalam transaksi akan terlepas setelah transaksi selesai dan perlu digabungkan untuk diedit dalam transaksi berikutnya. EclipseLink . @RayHulha
pritam kumar

4
@pritamkumar, Anda menjelaskan dengan baik konsep konteks ketekunan. Saya baru saja menambahkan bahwa ada juga anotasi javax.persistence.PersistenceContext, yang digunakan untuk memasukkan objek EntityManager dan menetapkan cakupan objek yang dimasukkan (misalnya, transaksi).
Paulo Merson

30

Diambil dari halaman ini :

Berikut adalah contekan singkat dunia JPA:

  • Cache adalah salinan data, salinan artinya ditarik dari tetapi berada di luar database.
  • Membersihkan Cache adalah tindakan memasukkan kembali data yang diubah ke dalam database.
  • PersistenceContext pada dasarnya adalah Cache. Itu juga cenderung memiliki koneksi database non-bersama itu sendiri.
  • EntityManager mewakili PersistenceContext (dan karena itu Cache)
  • EntityManagerFactory membuat EntityManager (dan karenanya PersistenceContext / Cache)

dapatkah satu PersisnteceContext memiliki instance EntityManager? Dan dapatkah satu Pengelola Entitas memiliki PersistenceContext? PersisntenceContext hanya satu untuk semua aplikasi?
Roberto

7

Sebuah konteks persisten merupakan entitas yang menyimpan data dan memenuhi syarat untuk bertahan dalam beberapa penyimpanan persisten seperti database. Setelah kami commitmelakukan transaksi di bawah sesi yang memiliki entitas ini terlampir, Hibernate menghapus konteks persisten dan perubahan ( masukkan / simpan, perbarui atau hapus ) pada mereka tetap ada di penyimpanan persisten.


7

Baik org.hibernate.SessionAPI dan javax.persistence.EntityManagerAPI mewakili konteks untuk menangani data persisten.

Konsep ini disebut konteks ketekunan . Data persisten memiliki status dalam kaitannya dengan konteks persistensi dan database yang mendasarinya.


5

"Sekumpulan instance (entitas) yang dapat dipertahankan yang dikelola oleh instance manajer entitas pada waktu tertentu" disebut konteks persistensi.

Anotasi JPA @Entity menunjukkan entitas yang dapat bertahan.

Lihat Definisi JPA di sini


4

Dalam istilah awam kita dapat mengatakan bahwa Persistence Context adalah lingkungan tempat entitas dikelola, yaitu menyinkronkan "Entitas" dengan database.


3

Sementara @pritam kumar memberikan gambaran yang bagus, poin ke-5 tidak benar.

Persistence Context dapat berupa Transaction Scoped - Persistence Context 'hidup' selama transaksi berlangsung, atau Extended - Persistence Context mencakup beberapa transaksi.

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

EntityManager dan Sesi Hibernate dari JPA menawarkan Konteks Ketekunan yang diperpanjang.


Hai user2771889, Anda benar, saya tidak menyebutkan cakupan konteks ketekunan yang diperluas. Poin ke-5 hanya terkait dengan konteks ketekunan cakupan transaksi.
pritam kumar

2

Kegigihan Konteks adalah lingkungan atau tembolok mana contoh entitas (yang mampu memegang data dan dengan demikian memiliki kemampuan untuk bertahan dalam database) yang dikelola oleh Badan Pengelola sync .Ini entitas dengan database.All benda memiliki @ Entity penjelasan mampu menjadi teguh. @Entity tidak lain adalah kelas yang membantu kita membuat objek untuk berkomunikasi dengan database. Dan cara objek berkomunikasi menggunakan metode. Dan yang memasok metode tersebut adalah Manajer Entitas.


1
Bagaimana jawaban ini berbeda dari jawaban yang ada?
Akin Okegbile
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.