Hibernate的m-t-o外键关联查询时条件为主键外的字段做查询条件出现org.hibernate.QueryException: could not re...

一个企业表、一个用户表。在用户表中做Hibernate的m-t-o的外键映射:

    <many-to-one name="tecmEcinfo" class="com.ecmanager.model.TecmEcinfo" fetch="select">
            <column name="CORPID" precision="10" scale="0" not-null="true" />
        </many-to-one>

.由于查询条件需要用到企业名称和企业编码, 所以在写查询条件的时候按照以前的样子写:
        if(null != ecName && !"".equals(ecName.trim()))
        {
            dc.add(Restrictions.like("tecmEcinfo.ecName", ecName, MatchMode.ANYWHERE).ignoreCase());
        }
       
        if(null != ecCode && !"".equals(ecCode.trim()))
        {
            dc.add(Restrictions.like("tecmEcinfo.ecCode", ecCode, MatchMode.ANYWHERE).ignoreCase());
           
        }

结果查询的时候报异常:

com.common.exception.ServiceException: org.springframework.orm.hibernate3.HibernateQueryException: could not resolve property: tecmEcinfo.ecName of: com.ecmanager.model.TecmEcuser; nested exception is org.hibernate.QueryException: could not resolve property: tecmEcinfo.ecName of: com.ecmanager.model.TecmEcuser

 

经过查找帮助文档,后得知可以使用一下的方法解决:

DetachedCriteria dc=DetachedCriteria.forClass(TecmEcuser.class).createAlias("tecmEcinfo", "ec");

if(null != ecName && !"".equals(ecName.trim()))
        {
            dc.add(Restrictions.like("ec.ecName", ecName, MatchMode.ANYWHERE).ignoreCase());
        }
        if(null != ecCode && !"".equals(ecCode.trim()))
        {
            dc.add(Restrictions.like("ec.ecCode", ecCode, MatchMode.ANYWHERE).ignoreCase());
           
        }        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值