日期:2014-05-18  浏览次数:20716 次

问HIBERNATE一句查询语句
搜索PO出错
主表对BIDDINGRESULTS是一对多,BIDDINGRESULT对MATERIALDETAIL是多对一,INTRO是MATERIALDETAIL一个字段,查询语句怎么写
搜索条件:
//物料编号
if   (StringUtil.isNotEmpty(materialSN))   {

// BiddingResult   biddingResult=facade.getMaterialDetailService().getResult(materialSN);
hqlParamsMap.put( "materialSN ",   materialSN);
hqlBuf.append( "   and   p.biddingResults.materialDetail.intro   =:materialSN ");
}

org.hibernate.QueryException:   could   not   resolve   property:   intro   of:   net.jite.sdzbgzpt.rubbishprocess.persistence.BiddingResult   [   from   net.jite.sdzbgzpt.purchaserInformation.persistence.PurchaserInformation   p   where   1=1     and   p.biddingResults.materialDetail.intro   =:materialSN]

------解决方案--------------------
p.biddingResults.materialDetail.intro =:materialSN

从这里看你的表间关系有点问题吧;
p----》biddingResults
biddingResults----》materialDetail

首先检查映射是否正确;
再着,根据个人经验,好象hibernate的where语句对3层以上的关联解析存在问题,但在select里面就没问题;有点奇怪,有人解释下么?

你这个问题用left outer join应该就能解决了;