get() yöntemi

Bir nesneyi kimliğine (veya Birincil Anahtarına) göre almak istiyorsanız, Hazırda Bekletme bunun için üç yönteme sahiptir:

  • yük()
  • elde etmek()
  • bulmak()

Aynı şeyi yapıyorlar ama nüanslar var. get() yönteminin genel biçimi şöyledir:

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

get() yöntemi, ikinci parametresi olarak döndürmesi gereken nesnenin kimliğini (Birincil Anahtar) alır. Daha sonra bu nesneyi veritabanından yükler ve döndürür. Örnek:

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

Veritabanında bu kimliğe sahip bir kayıt bulunmazsa, yöntem null döndürür.

yük() yöntemi

Bir nesneyi yüklemek için ikinci yöntem load() yöntemidir . load() yönteminin genel biçimi aynıdır:

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

Ancak davranışı get() yönteminden farklıdır .

İlk olarak, bu yöntem gerçek bir nesne değil, bir proxy: sanal bir saplama döndürür.

İkincisi, load() yöntemi kullanılırken , veritabanında böyle bir giriş olup olmadığı kontrol edilmez. Bunun yerine Hibernate, iletilen kimlikle hemen bir proxy nesnesi oluşturur ve onu döndürür.

Üçüncüsü, proxy nesnesinin yöntemleri çağrılırken veritabanıyla yapılan tüm çalışmalar gerçekleşecektir. Örneğin, getName() yöntemini çağırmaya çalışırsanız , veritabanına ilk çağrı gerçekleşir. Örnek:

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() yöntemi, veritabanındaki nesnelerin varlığını kontrol etmek için kullanılmamalıdır - bunu göstermeyecektir. Ek olarak, ona null gibi geçersiz bir ID iletirseniz, sadece null değerini döndürür.

bul() yöntemi

find() yöntemi, JPA standardından Oturum arabirimine geçirildi. Ve bildiğiniz gibi, bu standart sadece yöntemlerin imzasını açıklamakla kalmaz, aynı zamanda davranışı da düzenler.

Bu yöntem tam olarak get() yöntemi gibi çalışır . Nesne, iletilen anahtar tarafından bulunamazsa, yöntem basitçe null değerini döndürür.

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

yenileme() yöntemi

Veritabanından bir nesne yüklemekle ilgili başka bir yararlı yöntem de fresh() yöntemidir .

Geçirilen nesneye göre veritabanındaki verileri güncelleyen persist() yöntemini hatırlıyor musunuz ? Böylece, fresh() yöntemi tam tersi şekilde çalışır: varolan bir nesneyi veritabanındaki verilere dayalı olarak günceller.

Bu davranış, örneğin veritabanına bir nesne yazarken, orada yazılan verileri düzelten çeşitli saklı yordamlar çağrıldığında gereklidir.

Bu gibi durumlarda, değişmiş olma ihtimali varsa, nesneyi veritabanından yeniden okumak yararlı olabilir. Örnek:

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