hiberante中因爲緩存機製造成新存或者修改的數據查不到的解決方法

package dc.dao;

import java.util.Iterator;
import java.util.Set;

import junit.framework.TestCase;

//一對多的時候先存一,再存多,多.saveF(一),然後通過一的ID來加載查詢剛剛存進的數據,由於hiberante的
//緩存機制,只能查詢到一的數據,查詢不到多的數據,通過show_sql看到查詢時候沒發出sql語句
//通過設置lazy=false試過也不行,通過session.flush試過也不行
//最後發現通過在加載之前加上session.clear()就可以解決問題了
public class TestSaveAndLoad extends TestCase {
 
 TanluDAO tandao = new TanluDAO();//一
 Tanlu tan = new Tanlu();
 Ecswjcb ej = new Ecswjcb();//多
 EcswjcbDAO ejdao = new EcswjcbDAO();
 
 public void saveTest(){
  
  tan.setBeiZhu("test");
  tan.setJiDu("0");  
  tandao.save(tan);
  

  ej.setBenDi027tian(100);
  ej.setBenDi0sui(200);
  ej.setTanlu(tan);
  ejdao.save(ej);
  

//加上這句就可以解決問題了
  HibernateSessionFactory.getSession().clear();
  this.loadTest(tan.getTlid());
 }
 
 public void loadTest(String id){
  tan = tandao.findById(id);
  Set  set = tan.getEcswjcbs();
  Iterator itx = set.iterator();
  while(itx.hasNext()){
   ej = (Ecswjcb)itx.next();
   System.out.println(ej.getBenDi027tian());
   System.out.print("  heui:" + ej.getBenDi0sui());
  }
 }
}

發佈了29 篇原創文章 · 獲贊 2 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章