一个企业表、一个用户表。在用户表中做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());
}