Nuansa metode gabungan ().

Yen sampeyan pengin nggunakake Hibernate kanggo ngganti obyek sing wis disimpen ing database, banjur ana sawetara cara kanggo iki.

Kapisan yaiku metode gabungan () , sing nganyari informasi ing basis data adhedhasar obyek sing dilewati . Iki bakal njaluk query SQL UPDATE. Tuladha:

User user = new User();
user.setName("Kolyan");
session.save(user);

session.evict(user);     // detach the object from the session
user.setName("Masha");

User user2 = (User) session.merge(user);

Ana sawetara nuansa penting ing kene.

Pisanan, metode gabungan () ngasilake asil, obyek sing dianyari. Obyek iki nduweni status Persist lan ditempelake ing obyek sesi. Obyek liwati kanggo nggabungake () cara ora ngganti.

Koyone ora ana bedane antarane pangguna lan pangguna2, nanging ora. Sampeyan bisa pass obyek POJO kanggo merge () cara , lan minangka asil, cara bisa bali proxy (gumantung ing setelan Hibernate). Dadi mung elinga yen metode gabungan () ora ngganti obyek sing dilewati.

Sareh, yen obyek liwati kanggo nggabungake () status Transient (lan ora duwe ID), banjur baris kapisah bakal digawe kanggo ing database. Ing tembung liyane, printah persist() bakal dieksekusi .

Katelu, yen obyek wis ditempelake ing sesi (karo status Persist) liwati menyang merge () cara, banjur ora bakal kelakon - cara mung bakal bali obyek padha. Kenging punapa? Lan kabeh amarga nalika transaksi ditindakake, data kasebut bakal ditulis ing basis data:

User user = new User();
user.setName("Kolyan");
session.save(user);

user.setName("Masha"); //change the object attached to the session

session.close();  //all changed objects will be written to the database

Ora perlu nyimpen obyek saben wektu sawise owah-owahan. Yen obyek iki ana ing status Persist, banjur Hibernate bakal nindakake kabeh dhewe. Yen sampeyan ngganti obyek sing "ditempelake ing basa", kabeh owah-owahan bakal ditulis ing basa.

Nuances saka nganyari () cara

Hibernate uga duwe cara nganyari () , sing, kaya metode simpen () , diwarisake saka versi sadurunge. Kanthi cara iki, sampeyan mung bisa nganyari data obyek sing wis disimpen. Iki bakal njaluk query SQL UPDATE. Tuladha:

User user = new User();
user.setName("Kolyan");
session.save(user);

session.evict(user);     // detach the object from the session
user.setName("Masha");

session.update(user);

Cara iki ora ngasilake apa-apa lan ora ngganti obyek sing ana.

Yen sampeyan nelpon metode iki ing obyek anyar, pangecualian mung bakal dibuwang:

User user = new User();
user.setName("Kolyan");
session.update(user);   //an exception will be thrown here

saveOrUpdate() Metode

Sadurunge tekane JPA, fungsi saka persist () cara dileksanakake dening saveOrUpdate () cara . Tugase yaiku nganyari informasi babagan obyek sing ana ing database, lan yen ora ana, banjur nggawe. Iku meh tansah digunakake ing panggonan nyimpen () lan nganyari () cara .

Ora kaya cara nganyari () , bisa ngganti obyek sing diterusake. Contone, setel menyang ID sing ditugasake nalika disimpen ing database. Tuladha:

User user = new User();
user.setName("Kolyan");
session.saveOrUpdate(user);   //object will be written to the database

Cara kerjane:

  • yen obyek liwati duwe ID, banjur UPDATE cara SQL disebut
  • yen ID obyek liwati ora disetel, banjur cara INSERT SQL diarani