get() метод

Ако искате да получите обект по неговия ID (or първичен ключ), тогава Hibernate има три метода за това:

  • натоварване ()
  • получи()
  • намирам()

Те правят едно и също нещо, но има нюанси. Общият формат на метода get() е:

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

Методът get() приема като свой втори параметър ID (първичен ключ) на обекта, който трябва да върне. След това зарежда този обект от базата данни и го връща. Пример:

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

Ако запис с този идентификатор не бъде намерен в базата данни, тогава методът ще върне нула.

load() метод

Вторият метод за зареждане на обект е методът load() . Общият формат на метода load() е същият:

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

Поведението му обаче е различно от метода get() .

Първо, този метод не връща реален обект, а прокси: виртуален мъниче.

Второ, при използване на метода load() няма проверка дали има такъв запис в базата данни. Вместо това Hibernate незабавно създава прокси обект с предадения идентификатор и го връща.

Трето, цялата работа с базата данни ще се случи при извикване на методите на прокси обекта. Ако се опитате да извикате, например, метода getName() , тогава ще се случи първото извикване на базата данни. Пример:

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

Методът load() не трябва да се използва за проверка за наличие на обекти в базата данни - той просто няма да покаже това. Освен това, ако му подадете невалиден идентификатор, като например null, той просто ще върне null.

метод find().

Методът find() беше предаден на интерфейса на сесията от стандарта JPA. И Howто знаете, този стандарт описва не само сигнатурата на методите, но също така регулира поведението.

Този метод работи точно като метода get() . Ако обектът не е намерен от предадения ключ, тогава методът просто ще върне null.

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

метод refresh().

Друг полезен метод, който има общо със зареждането на обект от база данни, е методът refresh() .

Помните ли метода persist() , който актуализира данните в базата данни въз основа на предадения обект? И така, методът refresh() работи точно обратното: той актуализира съществуващ обект въз основа на данни от базата данни.

Това поведение е необходимо, ако например, когато записвате обект в базата данни, там се извикват различни съхранени proceduresи, които коригират записаните данни.

В такива случаи може да е полезно да прочетете отново обекта от базата данни, ако има вероятност той да се е променил. Пример:

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