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());
  }
 }
}

你可能感兴趣的:(sql,制造,String,iterator,Class)