Hibernate buforowanie poziomu tranzakcji.

0

Witam,

  Pierwszy raz w hibernate używam buforowania, 2go poziomu. Po konfiguracji chciałm sprawdzić jego działanie. Jendnak na początku przetestowałem 'obowiazkowe' buforowanie 1go poziomu tranzakcji. Którego nie da się wyłączyć. Jak widać w jednej sesji stworzyłem dwa obiekty o indexie 1. Myślalem że na poziomie tranzakcji zapytanie (obiekt) zostanie zapamiętane w buforze i wykona sie tylko przy tworzeniu 1go obiektu. Ku mojemu zdziwieniu otrzymalem dwa zapytania. Myle się? może czegoś nie rozumiem z tym buforowaniem? Jaki może być powód  dodatkowego zapytania?
Session session = HibernateUtil.getSessionFactory().openSession();
    Transaction tx=null;
    try{
        tx = session.beginTransaction();
        Area a = (Area)session.get(Area.class, 1);  
        Area a2 = (Area)session.get(Area.class, 1);
        tx.commit();
        }
    catch (Exception e) {if (tx!=null) tx.rollback();e.printStackTrace();Log.setLog(e.toString()); }
    finally {session.close();} 
Hibernate: select area0_.ID as ID1_0_0_, area0_.ACTIVE as ACTIVE2_0_0_, area0_.DESCRIPTION as DESCRIPT3_0_0_, area0_.VERSION as VERSION4_0_0_ from AREA area0_ where area0_.ID=?
Hibernate: select area0_.ID as ID1_0_0_, area0_.ACTIVE as ACTIVE2_0_0_, area0_.DESCRIPTION as DESCRIPT3_0_0_, area0_.VERSION as VERSION4_0_0_ from AREA area0_ where area0_.ID=?
0

A pewny jesteś że faktycznie poszły 2 zapytania do bazy? Bo to że logger ci wypisał że hibernate zmontował takie zapytanie to akurat o niczym nie świadczy, to akurat dość logiczne. Gdyby hibernate nie pokazywał w logu zapytań o obiekty z cache to ciekawi mnie jak byś potem takie cos debugował ;]

0

Nie jestem pewien, jak moge to sprawdzić z posiomu hibernate?

0

Akurat jest na 99% przekonany ze po takim logu możesz stwierdzić ze te zapytania poszły na baze. Zamien get na load

0

jest ok, mój błąd. Akurat przy wywołaniu

 Area a = (Area)session.get(Area.class, 1); 

wskazałem wartośc ID której nie ma w bazie, zatem obiekt nie został zbuforowany. I dlatego zapytanei wykonało się dwa razy. Po poprawce jest już tylko jednio zapytanie. Dzięki za pomoc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1