get() na pamamaraan

Kung gusto mong makakuha ng isang bagay sa pamamagitan ng ID nito (o Pangunahing Key), ang Hibernate ay may tatlong pamamaraan para dito:

  • load()
  • kumuha ()
  • hanapin()

Ginagawa nila ang parehong bagay, ngunit may mga nuances. Ang pangkalahatang format ng get() na pamamaraan ay:

EntityClass Name = session.get(EntityClass.class, Object primaryKey);

Kinukuha ng get() method bilang pangalawang parameter nito ang ID (Primary Key) ng object na kailangan nitong ibalik. Pagkatapos ay nilo-load nito ang bagay na iyon mula sa database at ibinabalik ito. Halimbawa:

User user = session.get(User.class, 2);

Kung ang isang talaan na may ganitong ID ay hindi makita sa database, ang pamamaraan ay magbabalik ng null.

load() na pamamaraan

Ang pangalawang paraan para sa paglo-load ng isang bagay ay ang load() method . Ang pangkalahatang format ng pamamaraan ng load() ay pareho:

EntityClass Name = session.load(EntityClass.class, Object primaryKey);

Gayunpaman, iba ang pag-uugali nito sa get() method .

Una, ang pamamaraang ito ay hindi nagbabalik ng isang tunay na bagay, ngunit isang proxy: isang virtual stub.

Pangalawa, kapag ginagamit ang load() method , walang check kung mayroong ganoong entry sa database. Sa halip, ang Hibernate ay agad na gumagawa ng isang proxy object na may naipasa na ID at ibinabalik ito.

Pangatlo, ang lahat ng trabaho sa database ay magaganap kapag tumatawag sa mga pamamaraan ng proxy object. Kung susubukan mong tumawag, halimbawa, ang getName() method , ang unang tawag sa database ay magaganap. Halimbawa:

User user = session.load(User.class, new Integer(123));
String name = user.getName(); //this is where the first call to the database will occur

Ang pamamaraan ng load() ay hindi dapat gamitin upang suriin ang pagkakaroon ng mga bagay sa database - hindi lang ito ipapakita. Bilang karagdagan, kung nagpasa ka ng di-wastong ID, tulad ng null, dito, ibabalik lamang nito ang null.

find() na paraan

Ang find() method ay ipinasa sa Session interface mula sa JPA standard. At tulad ng alam mo, inilalarawan ng pamantayang ito hindi lamang ang lagda ng mga pamamaraan, ngunit kinokontrol din ang pag-uugali.

Ang pamamaraang ito ay gumagana nang eksakto tulad ng get() method . Kung ang bagay ay hindi natagpuan sa pamamagitan ng naipasa na susi, ang pamamaraan ay magbabalik lamang ng null.

User user = session.find(User.class, -2); //method will return null

refresh() na pamamaraan

Ang isa pang kapaki-pakinabang na paraan na may kinalaman sa paglo-load ng isang bagay mula sa isang database ay ang refresh() method .

Tandaan ang paraan ng persist() na nag-update ng data sa database batay sa naipasa na bagay? Kaya, ang refresh() na pamamaraan ay gumagana nang eksakto sa kabaligtaran: ina-update nito ang isang umiiral na bagay batay sa data mula sa database.

Ang pag-uugali na ito ay kinakailangan kung, halimbawa, kapag nagsusulat ng isang bagay sa database, ang iba't ibang mga naka-imbak na pamamaraan ay tinatawag doon na nagwawasto sa nakasulat na data.

Sa ganitong mga kaso, maaaring maging kapaki-pakinabang na basahin muli ang bagay mula sa database kung may pagkakataon na ito ay nagbago. Halimbawa:

User user = new User();
user.setName("Kolyan");
session.persist(user);
session.flush();  //Force called SQL INSERT and call triggers

session.refresh(user);
// here we continue to work with the updated object