Hazırda Bekletme İpuçları: Yerel sorgu sonuçlarını varlıklarla eşlemenin kolay yolları

Portakalkafa

Global Mod
Global Mod


  1. Hazırda Bekletme İpuçları: Yerel sorgu sonuçlarını varlıklarla eşlemenin kolay yolları

Hazırda Bekletme İpuçları serisi, yaygın Hazırda Bekletme sorularına hızlı ve kolay çözümler sunar. Bu kez, karmaşık sorguların sonuçları ve bunların yönetilen varlıklarla ilişkisi hakkında.


Rica etmek:


JPQL için çok karmaşık olduğu için sorgumu yerel bir SQL sorgusu olarak uygulamak zorunda kaldım. Sorgu sonucunu ayrı ayrı yüklemek zorunda kalmadan varlıklarla eşlemenin bir yolu var mı?

Çözüm:


Sorgu, varlık tarafından eşlenen tüm veritabanı sütunlarını seçerse, sonucu varlıklarla eşlemek için 2 seçenek vardır:

  1. Sonuç kümesi, varlık tarafından eşlenen veritabanı tablosuyla aynı sütun adlarını kullanıyorsa, basit bir örtük eşleme kullanılabilir.
  2. Sonuç kümesindeki sütun adları, veritabanı tablosundakilerden farklıysa, açık bir eşleme tanımlanmalıdır.
Sorgu sonuçlarının örtülü eşlemesi


Çoğu sorgu için, sorgu sonucunun dolaylı olarak dönüştürülmesi en hızlı ve en kolay çözümdür.Tek yapmanız gereken seçili varlık sınıfını ek bir parametre olarak eklemektir. NativeQuery oluştur yönteme geçilir.


Book b = (Book) em.createNativeQuery("SELECT * FROM book b WHERE id = 1",
Book.class).getSingleResult();

the Varlık Yöneticisi varlık için tanımlanan sütun özelliklerine sütun adı eşlemelerini kullanır. Bu nedenle, yerel sorgu sonuç kümesinin sütun adları, varlık tarafından temsil edilen veritabanı tablosunun sütun adlarıyla eşleşmelidir.

Sorgu sonuçlarının açık eşlemesi


Sorgu sonucunun sütun adları tablonunkinden farklıysa, bir açık eşleme kullanılarak yapılabilir. @SqlResultSetMapping ek açıklama tanımlanabilir.

@SqlResultSetMapping(
name = "BookMapping",
entities = @EntityResult(
entityClass = Book.class,
fields = {
@FieldResult(name = "id", column = "id"),
@FieldResult(name = "version", column = "version"),
@FieldResult(name = "title", column = "title"),
@FieldResult(name = "publishingDate",
column = "publishingDate"),
@FieldResult(name = "publisher", column = "publisherid")}))

Eşlemeye daha sonra başvurulabilecek ad, ea @EntityResul-belirtmek için ek açıklama. the @EntityResult-Ek açıklama, her kayıt için hangi sınıfın somutlaştırılacağını belirtir ve bir liste aracılığıyla açıklar. @FieldResult-Sonuç sütunlarının varlık özellikleriyle nasıl eşleştiğine ilişkin ek açıklamalar.

Bu eşlemeyi kullanmak için tek yapmanız gereken im’i kullanmaktır. @SqlResultSetMapping ikinci parametre al olarak tanımlanan isim NativeQuery oluşturyönteme geçilir.

em.createNativeQuery("SELECT * FROM book b WHERE id = 1",
"BookMapping").getSingleResult();

Bu şekilde, yerel bir SQL sorgusunun sonucu, kalıcılık bağlamı tarafından yönetilmeyen birden çok varlıkla veya POJO’larla da eşlenebilir.

Hazırda Bekletme İpuçları: Kitap


“Hibernate Tips: 70+ Solutions to Common Hibernate Problems” adlı kitabım, basit ve karmaşık eşleme tanımları, günlüğe kaydetme, Java 8 desteği, önbelleğe alma ve statik sorgular ve dinamikler oluşturma gibi konularda 70’den fazla tarif içeriyor. Amazon’da basılı ve e-kitap biçiminde ve hibernate-tips.com adresinde PDF biçiminde mevcuttur.


()



Haberin Sonu
 
Üst