2013-02-25 20 views
7

Aşağıdaki kod var:Sorgulama hazırda önbellek

Person a = new Person(); 
a.setName("John"); 

Session session = openHibernateSession(); 

session.beginTransaction(); 

session.saveOrUpdate(a); 

Criteria critera = session.createCriteria(Person.class); 
critera.add(Restrictions.eq("name","John")); 
Person personFromCache = (Person) criteria.uniqueResult(); 

... 

session.commit(); 

İstediğim veritabanı ve hazırda bekletme önbelleğine hem nesneleri arama yeteneği sahip olmaktır. Aşağıdaki örnek, uniqueResult numaralı telefonu çağırdıktan sonra null değerini döndürür. Henüz veritabanına işlenmemiş olan kaydedilmiş nesneleri geri almanın bir yolu var mı?

cevap

1

Kimlikten başka bir arama yapıyorsanız, Hazırda Beklet, birinci seviye önbelleği kullanmaz. Hazırda bekletme ve yükleme varsayılan olarak birinci düzey önbellekle ilgilidir, ancak ölçüt sorgulaması yapılmaz. Senin durumunda yaparken oturumdan veriler dolayısıyla Kimliği ge oluşturulan olacak veritabanına ve sonuç Kriterleri sorgu olarak senkronize edilecektir böylece oturumu = Sadece bu session.flush(); gibi oturumunuzu temizlemek ateş basması ile yanımda

  1. iki çözüm vardır olacak sonucu veritabanında bulup size sonuç verecektir.

  2. ikinci seviye önbellek hazırda bekletme etkinleştirme = Sen EHCache gibi hazırda önbellek sağlayıcıları tarafından ikinci seviye önbellek etkinleştirmek ve hile uygulayabilirsiniz.

0

Sen StatelessSession kullanabilirsiniz ama uyardı: bu entitys herhangi oturuma bağlı olmayan ve ilişkileri ya da tembel alanları gidermek ister eğer İstisnalar alacak!

0
session.beginTransaction(); 

session.saveOrUpdate(a); 

session.flush(); 

Criteria critera = session.createCriteria(Person.class); 
critera.add(Restrictions.eq("name","John")); 
Person personFromCache = (Person) criteria.uniqueResult(); 
0

TestNg test çerçevesi kullanımı dışında bazı benzer şeyler yaparız. Bazı cevaplar session.flush() yöntem çağrısını tartışır. Doğru. temizlemek için çağrı tüm veritabanı şu anda kuyrukta bekleyen idam ve kuyruktan temizlenmezse aramaları emin olarak gibi birkaç şeyi yapmaya Hazırda söyler.

0

Size kullanıcı adı esasına göre seçilmesi bile veri döndürür. Bu boş döndürmüyor.