Daftar Negara

Lan saiki kesenengan diwiwiti. Kita bakal sinau negara obyek Entitas. Sampeyan kudu mbayar kabeh, lan uga kanggo nggunakake Hibernate. Apa sampeyan ora mikir yen sinau HQL kuwi regane? Ora, urip luwih rumit.

Yen sampeyan duwe sawetara obyek Entitas sing bisa disimpen ing database nggunakake Hibernate, banjur saka sudut pandang Hibernate, obyek iki bisa duwe papat negara:

  • Transient
  • Persistent (utawa Ngatur)
  • Dibuwang
  • Dibusak

Lan kanggo kapentingan sampeyan, aku bakal nambah gambar iki kanggo kuliah iki:

Transient

Nyatane, kabeh luwih gampang tinimbang sing katon, sanajan ora tanpa nuansa. Contone, saben obyek Entitas sing digawe kanthi eksplisit nggunakake kode Jawa, lan ora mbukak saka database nggunakake Hibernate, nduweni status Transient (transparan).

EmployeeEntity employee = new EmployeeEntity();

Status Transien tegese Hibernate ora duwe gagasan babagan obyek iki, lan ora ana tumindak ing obyek sing mengaruhi Hibernate, lan uga karya Hibernate ing obyek iki.

Obyek kuwi uga diarani POJO - Obyek Jawa Kuno Polos . Istilah iki asring digunakake minangka kebalikan saka macem-macem obyek kanthi prilaku sing angel. Elinga obyek Moc sing digawe Mockito? Ing kene padha ora POJO.

Yen sawetara kode klien bisa digunakake karo obyek kanthi status Transient, mula interaksi kasebut bisa diterangake kanthi skema super-simple:

Persistent utawa Ngatur

Kasus sing paling umum sabanjure yaiku obyek sing ana gandhengane karo mesin Hibernate. Statuse diarani Persistent (utawa Dikelola). Ana rong cara kanggo entuk obyek kanthi status iki:

  • Muat obyek saka Hibernate.
  • Simpen obyek ing Hibernate.

Tuladha:

Employee employee = session.load(Employee.class, 1);
Employee employee = new Employee ();
session.save(employee);

Objek kasebut biasane cocog karo sawetara jinis rekaman ing database, duwe ID lan liya-liyane. Obyek iki ditempelake ing sesi Hibernate, lan ing umum bisa diwakili ora obyek nyata, nanging sawetara jinis proxy.

Iku cukup bisa sing sawise nelpon session.load () cara , sampeyan bakal njaluk maneh sawetara obyek rintisan (proxy), lan kabeh telpon kanggo database bakal dileksanakake mung sawise nelpon cara obyek iki. Nanging kita bakal ngomong babagan rincian kasebut mengko.

Lan interaksi kode klien lan obyek ing status Ngatur bisa diterangake karo gambar ing ngisor iki:

Dibuwang

Negara sabanjure yaiku nalika obyek wis dicopot saka sesi kasebut. Yaiku, yen obyek kasebut dipasang ing sesi Hibernate, nanging banjur sesi ditutup utawa transaksi rampung, lan Hibernate ora maneh ngawasi obyek iki.

Tuladha:

session.close();
session.evict(entity);

Ing conto pisanan, sesi ditutup. Ing kasus kaloro, kita wis jelas nuduhake yen kita pengin nyopot obyek saka sesi nggunakake cara evict () .

Skema interaksi kode-obyek anyar bakal katon kaya iki:

Lan ing kene dadi menarik. Yen obyek sampeyan dipikolehi saka Hibernate, kemungkinan sampeyan diwenehi proxy tinimbang obyek nyata. Lan obyek proxy iki, sawise medhot saka sesi, bakal mbuwang pangecualian nalika cara disebut.

Iki minangka masalah sing paling umum kanggo kabeh pamula nalika nggarap Hibernate. Sampeyan kudu ngerti persis ing wektu tartamtu jawaban kanggo pitakonan kaya iki nalika sampeyan lagi nggarap obyek Entitas :

  • Apa sampeyan duwe obyek nyata utawa mung proxy saka obyek nyata?
  • Apa sampeyan saiki transaksi utawa ora?
  • Apa transaksi diwaca-tulis utawa transaksi mung diwaca?
  • Apa obyek diatur dening mekanisme LazyLoading?
  • Kang bagean saka obyek wis dimuat menyang memori, lan kang bagean bakal dimuat nalika diakses?
  • Kepiye obyek sampeyan disambungake karo obyek sing gumantung?

Kabar apik yaiku sing paling kerep katon. Nanging sampeyan isih kudu ngerti carane kabeh bisa ing hood. Pemrograman deklaratif yaiku - sampeyan bisa nulis kode sajrone 10 menit, ngerti kenapa ora bisa digunakake - sajrone 10 jam :)

Dibusak

Lan negara pungkasan obyek Entitas sampeyan bisa dibusak. Sing mbokmenawa wis guessed saka jenenge, iki negara saka obyek remot.

Negara iki katon amarga yen sampeyan mbusak sawetara obyek saka database, obyek Jawa ora bakal langsung ilang ing ngendi wae.

Employee employee = session.load(Employee.class, 1);
//after loading the object's state is Persisted

session.remove(employee);
//after deletion, the state of the object is Removed

session.save(employee);
//and now Persisted again

session.close();
//and now the Detached state