0

理論的には、session.get() メソッドは、エンティティがキャッシュに格納されているかどうかに関係なく、常にデータベースにヒットするはずです。しかし、session.get() または session.load() を使用するたびに、どちらもデータベースに 2 回ヒットしません。

    Session session = factory.openSession();
    tx = session.beginTransaction();
    Customer cust = (Customer)session.get(Customer.class,2);    
    System.out.println(cust.getCid()+","+cust.getFirstName()+","+cust.getLastName()+","+cust.getPhone());                                
    Customer cust2 = (Customer)session.get(Customer.class,2);          
    System.out.println(cust2.getCid()+","+cust2.getFirstName()+","+cust2.getLastName()+","+cust2.getPhone());
    tx.commit();
    session.close();

これが出力です。

Hibernate: select customer0_.cid as cid1_1_0_, customer0_.firstName as firstNam2_1_0_, customer0_.lastName as lastName3_1_0_, customer0_.email as email4_1_0_, customer0_.phone as phone5_1_0_, customer0_.aid as aid6_1_0_ from mycustomers customer0_ where customer0_.cid=?
2,Sam,pp,9799999999
2,Sam,pp,9799999999

選択クエリは 1 回だけ実行され、次回はキャッシュから取得されます。session.load() メソッドも使用すると、同じ出力が得られます。

ここで何か不足していますか?どうか明らかにしてください。

4

1 に答える 1