Sql HQL Join-需要加入的路径!冬眠
我刚开始休眠,遇到了以下问题: 当我尝试运行此查询时,出现“预期加入的路径!”异常:Sql HQL Join-需要加入的路径!冬眠,sql,hibernate,hql,Sql,Hibernate,Hql,我刚开始休眠,遇到了以下问题: 当我尝试运行此查询时,出现“预期加入的路径!”异常: String hql=“从机票中选择平均价格(t.price)加入航班f,其中f.number=”+航班号+”; Query Query=this.session.createQuery(hql); List=query.List(); 我想选择一个给定航班已售出机票的平均价格 我已经检查了这些链接,但没有解决我的问题: 我的代码是: Flight.hbm.xml Ticket.hbm.xml 没有
String hql=“从机票中选择平均价格(t.price)加入航班f,其中f.number=”+航班号+”;
Query Query=this.session.createQuery(hql);
List=query.List();
我想选择一个给定航班已售出机票的平均价格
我已经检查了这些链接,但没有解决我的问题:
我的代码是:
Flight.hbm.xml
Ticket.hbm.xml
没有JOIN的所有其他查询都可以正常工作。我不知道问题出在哪里
正确的查询是:
从机票t中选择平均价格(t.price)加入t.flight f,其中f.number=:flightNumber
连同查询执行:
Transaction tx=session.beginTransaction();
String hql=“从机票t中选择平均价格(t.price)加入t.flight f,其中f.number=:flightNumber”;
Query Query=this.session.createQuery(hql).setString(“flightNumber”,flightNumber);
List=query.List();
tx.commit();
如您链接到的问题和中所述,连接使用实体之间的关联。因此,正确的查询是
select avg(t.price) from Ticket t join t.flight f where f.number = :flightNumber
还请注意,使用参数比在查询中直接连接值要好得多。它自动处理报价和转义,并且没有任何HQL注入的风险。谢谢。这解决了我的问题。正确的查询实际上是“从Ticket t join t.flight f中选择平均价格(t.price),其中f.number=:flightNumber”Oops。对我修正了答案。在这种情况下,内部连接是可选的,因此可以用更可读的形式编写:
从Ticket t中选择svg(t.price),其中t.flight.number=:flightNumber