//LimsMeasPay类
public class LimsMeasPay {
private Integer id;
private LimsMeasContractSample limsMeasContractSample;
}hibernate映射文件为<many-to-one name="limsMeasContractSample" property-ref="contractSampleId" class="model.LimsMeasContractSample" fetch="select">
<column name="contract_sample_id" length="25" not-null="true" />
</many-to-one>
//LimsMeasContractSample类public class LimsMeasContractSample {
private Integer id;
private Set<LimsMeasContractSampleFlowTo> limsMeasContractSampleFlowTos = new HashSet<LimsMeasContractSampleFlowTo>(0);
}它的hibernate映射文件是<set name="limsMeasContractSampleFlowTos" inverse="true">
<key column="contract_sample_id" property-ref="contractSampleId" />
<one-to-many class="cn.com.zhouphratry.core.webapp.model.LimsMeasContractSampleFlowTo" />
</set>//LimsMeasContractSampleFlowTo类
public class LimsMeasContractSampleFlowTo {
private Integer id;
private Set<LimsMeasContractSampleFlowToParam> limsMeasContractSampleFlowToParams =
new HashSet<LimsMeasContractSampleFlowToParam>(0);
}LimsMeasContractSampleFlowTo类的hibernate映射文件为 <set name="limsMeasContractSampleFlowToParams" inverse="true">
<key column="flow_to_id" property-ref="flowToId" />
<one-to-many class="cn.com.zhouphratry.core.webapp.model.LimsMeasContractSampleFlowToParam" />
</set>//LimsMeasContractSampleFlowToParam类
public class LimsMeasContractSampleFlowToParam {
private Integer id;
private String paramId;//小组部门编号
}我想通过paramId查询到LimsMeasPay 怎么做到
后台action里代码是 hql = "from LimsMeasPay lmp where 1=1",后台我无法改动
前台js页面上是
where = "and lmp.limsMeasContractSample.limsMeasContractSampleFlowTos.limsMeasContractSampleFlowToParams.paramId in ('1','2')"
结果报错:org.hibernate.QueryException: illegal attempt to dereference collection [limsmeaspa0_.idlimsmeaspa0_.contract_sample_idlimsMeasContractSample.limsMeasContractSampleFlowTos] with element property reference [limsMeasContractSampleFlowToParams]
然后我又把条件改为" and lmp.limsMeasContractSamplein ( " +
"select lmcs from LimsMeasContractSample lmcs where lmcs.limsMeasContractSampleFlowTos.id in ( " +
" select lmcsft from LimsMeasContractSampleFlowTo lmcsft where lmcsft.limsMeasContractSampleFlowToParams in ( " +
" select lmcsftp from LimsMeasContractSampleFlowToParam lmcsftp where lmcsftp.paramId in ( " +
" '1','2'" +
")"+
")"+
")" +
")";还是报错
郁闷呀,路过的走过的帮个忙哈,谢谢啦
Servlet.service() for servlet default threw exception
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: select near line 1, column 258 [from cn.com.zhouphratry.core.webapp.model.LimsMeasPay lmp where 1=1 and lmp.status = 1 and lmp.limsMeasContractSample in ( select lmcs from cn.com.zhouphratry.core.webapp.model.LimsMeasContractSample lmcs where lmcs.limsMeasContractSampleFlowTos.id in (1 select lmcsft from cn.com.zhouphratry.core.webapp.model.LimsMeasContractSampleFlowTo lmcsft where lmcsft.limsMeasContractSampleFlowToParams in ( select lmcsftp from cn.com.zhouphratry.core.webapp.model.LimsMeasContractSampleFlowToParam lmcsftp where lmcsftp.paramId in ( select oso.cid from cn.com.zhouphratry.core.webapp.model.OssSysOrganize oso where oso.name like '%' and oso.signature='MEAS_DEPARTMENT' )))) order by lmp.id desc]
at org.hibernate.hql.ast.QuerySyntaxException.convert(QuerySyntaxException.java:54)
lmp.limsMeasContractSample 不是引用limsMeasContractSample这个对象,是他所对应的列
第二种也不对
lmp.limsMeasContractSample 这个表示的是"contract_sample_id"
而select lmcs from ..... lmcs 表示的是个对象
所以肯定不对
and lmp.limsMeasContractSample in ( " +
"select lmcs from LimsMeasContractSample lmcs where l.............
改成这样都在试试吧,
and lmp.limsMeasContractSample in ( " +
"select lmcs.id from LimsMeasContractSample lmcs where l.............good luck
后查找对一个的LimsMeasConractSampleFlowTo ft 对象:from LimsMeasConractSampleFlowTo ft where ft.limsMeasContractSampleFlowToParam in
(from LimsMeasContractSampleFlowToParam ftp where ftp.paramId in ('1','2') )依次往回找,就能得到最后的LimsMeasPay lmp 对象了个人感觉道理就是这样,代码没有测试,可能有问题。给分吧!别浪费啦