select t from TradesMan t join t.tradesManPs tp where t.kName like :kName and tp.oeNo like :oeNo"

解决方案 »

  1.   

    select t from TradesMan t left join TradesManPs tp where t.kName like :kName and tp.oeNo like :oeNo"
      

  2.   

    不行的,异常如下:
    org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! [select t from domain.TradesMan t left join TradesManPs tp where t.kCountry like :kCountry and t.kProvince like :kProvince and t.kCity like :kCity and tp.oeNo like '111111']
    at org.hibernate.hql.ast.ErrorCounter.throwQueryException(ErrorCounter.java:59)
    at org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:225)
    at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:158)
    at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:109)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:75)
    at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:54)
    at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:71)
    at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
    at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
    at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1583)
    at dao.hibernate.HibTradesManDao.getlistTradesManByArea(HibTradesManDao.java:238)
    at logic.Facade.getlistTradesManByArea(Facade.java:710)
    at web.dwr.provide.ProductSearchProvide.getDataListForTradesMan(ProductSearchProvide.java:87)
    at web.dwr.handle.TradesmanSearchHandle.getTradesManList(TradesmanSearchHandle.java:32)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at org.directwebremoting.impl.ExecuteAjaxFilter.doFilter(ExecuteAjaxFilter.java:34)
    at org.directwebremoting.impl.DefaultRemoter$1.doFilter(DefaultRemoter.java:310)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:313)
    at org.directwebremoting.impl.DefaultRemoter.execute(DefaultRemoter.java:172)
    at org.directwebremoting.servlet.UrlProcessor.handle(UrlProcessor.java:130)
    at org.directwebremoting.servlet.DwrServlet.doPost(DwrServlet.java:188)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at web.filters.EncodingFilter.doFilter(EncodingFilter.java:21)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:868)
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:663)
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    at java.lang.Thread.run(Thread.java:595)
    Caused by:  Path expected for join!
      

  3.   

    谢谢你的回复,右连接我试了还是不行,我是Hibernate新手,应该是配置有问题了,请帮忙看一下,我的配置如下:
    TradesMan.hbm.xml:<class name="domain.TradesMan" table="TradesMan"><!--把类和数表关联起来-->
            <id name="lsId">
                <generator class="increment"/>
    </id>
    <property name="prosecution" type="string"/>
    ……

    <set
        inverse="false"
        lazy="false"
        name="tradesManPs"
        cascade="delete-orphan"
    >
       <key column="lsId" foreign-key="fk"/>
       <one-to-many class="domain.TradesManP"/>
    </set>

    <many-to-one name="mUser" class="domain.MUser" column="userId" cascade="delete" not-null="false"/>

        </class>TradesManP.hbm.xml配置如下:
    <class name="domain.TradesManP" table="TradesManP"><!--把类和数表关联起来-->
            <id name="lpId">
                <generator class="increment"/>
    </id>
    <property name="oeNo" type="string"/>
    ……

    <many-to-one name="tradesMan" class="domain.TradesMan" column="lsId" not-null="false"/>
    </class>
      

  4.   

    我觉得配置有问题,但是从你的hbm文件上没看出什么。看看你的config文件吧.你再检查一下库的字段关联关系有没有问题。
      

  5.   

    建议高手把有关hibernate连接查询的问题整理一下,
    包括对应hbm.xml文件中关联的处理以及相应的hql语句.
    实在是郁闷啊.
      

  6.   

    对应的SQL语句能查出来吗,贴出来看看吧
      

  7.   

    select t from TradesMan t join TradesManPs tp where t.kName like :kName and tp.oeNo like :oeNo"
      

  8.   

    一对多查询显然你应该从“多”的一段开始筛选,SQL语句如下:
    select TradesMan.*
    from orders TradesManPs 
    inner join customer TradesMan 
    on TradesManPs.cust_id=TradesMan.id 
    where (TradesMan.kName like ?) 
    and (TradesManPs.oeNo  like ?)
    对应的HQL为:
    select tp.tradesMan 
    from TradesManPs tp 
    where tp.tradesMa.kName like :kName 
    and tp.oeNo like :oeNo
      

  9.   

    To:arrowkylin(老杨)
    你的方法可以用,不过效率低了些,tradesMan里有1000条记录,而TradesManPs里有100万条数据,查询速度可想而知了,并且查出来还必须得把tp.tradesMan里重复的去掉呢!
      

  10.   

    select p.tradesMan from TradesManP p where p.tradesMan.kName like :kName and p.oeNo like :oeNo
    另外TradesManP类定义中的lsId是不需要的.