我刚进入休眠状态,遇到了以下问题:我收到了 “希望加入的路径!” 当我尝试运行此查询时出现异常:
String hql = "select avg(t.price) from Ticket t JOIN Flight f WHERE f.number = '" + flightNumber + "'";
Query query = this.session.createQuery(hql);
List<Double> list = query.list();
我的代码是:
Flight.hbm.xml
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="pck.Flight" table="flight" catalog="airbook">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="sourceairport" class="pck.Sourceairport" fetch="select">
<column name="sourceairportid" />
</many-to-one>
<many-to-one name="destinationairport" class="pck.Destinationairport" fetch="select">
<column name="destinationairportid" />
</many-to-one>
<property name="number" type="string">
<column name="number" length="30" />
</property>
<property name="date" type="timestamp">
<column name="date" length="19" />
</property>
<property name="miles" type="java.lang.Integer">
<column name="miles" />
</property>
<property name="numberofseats" type="java.lang.Integer">
<column name="numberofseats" />
</property>
<property name="airplane" type="string">
<column name="airplane" length="30" />
</property>
<set name="tickets" table="ticket" inverse="true" lazy="true" fetch="select">
<key>
<column name="flightid" />
</key>
<one-to-many class="pck.Ticket" />
</set>
</class> </hibernate-mapping>
Ticket.hbm.xml
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="pck.Ticket" table="ticket" catalog="airbook">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="identity" />
</id>
<many-to-one name="flight" class="pck.Flight" fetch="select">
<column name="flightid" />
</many-to-one>
<many-to-one name="passenger" class="pck.Passenger" fetch="select">
<column name="passengerid" />
</many-to-one>
<property name="price" type="java.lang.Double">
<column name="price" precision="22" scale="0" />
</property>
</class>
</hibernate-mapping>
所有其他没有JOIN的查询都可以正常工作。我不知道问题出在哪里。
正确的查询是:
select avg(t.price) from Ticket t join t.flight f where f.number = :flightNumber
并与查询执行一起:
Transaction tx = session.beginTransaction();
String hql = "select avg(t.price) from Ticket t join t.flight f where f.number = :flightNumber";
Query query = this.session.createQuery(hql).setString("flightNumber", flightNumber);
List<Double> list = query.list();
tx.commit();
如您所链接的问题和Hibernate文档中所述,实体之间的连接使用关联。所以正确的查询是
select avg(t.price) from Ticket t join t.flight f where f.number = :flightNumber
还要注意,与直接在查询中串联值相比,使用参数是一种更好的解决方案。它可以自动处理报价和转义,并且没有注入HQL的风险。
我刚开始Hibernate,遇到了以下问题:我得到了“加入的路径!” 尝试运行此查询时出现异常: 我想选择给定航班已售出的机票的平均价格。 我已经检查了这些链接,但我没有解决我的问题:HQL左连接:连接预期的路径hql内部连接预期的路径!错误 我的代码是: 航班.hbm.xml 票据.hbm.xml 没有JOIN的所有其他查询都可以正常工作。我不知道问题出在哪里。 正确的问题是: 连同查询执行:
问题内容: 我刚进入hibernate状态,遇到了以下问题:我收到了 “希望加入的路径!” 当我尝试运行此查询时出现异常: 我想选择给定航班已售出机票的平均价格。 我的代码是: Flight.hbm.xml Ticket.hbm.xml 所有其他没有JOIN的查询都可以正常工作。我不知道问题出在哪里。 正确的查询是: 并与查询执行一起: 问题答案: 如您所链接的问题和Hibernate文档中所述,
问题内容: HQL连接查询有问题。谁能告诉我我的下面加入HQL查询有什么问题?我正在使用Hibernate 4.3.6,JDK 7和Groovy 2.2 我在上面的代码中运行时遇到以下错误 以下是我的包裹实体 以下是我的TransportFile实体 我参考了这篇文章HQL左联接:联接所需的路径,但是我的HQL联接查询没有任何磨损。 问题答案: 此异常 “预期加入的路径” 表示: 提供从一个实体到
问题内容: 我有一个hibernate映射问题。我有以下两个数据库表(不允许更改数据库): 我试图为这些数据库表创建实体,但是我不知道如何映射表之间的连接。这是我的尝试(但这是错误的): 困难在于我想在列和一部分嵌入式Id列之间建立一个OneToMany连接。对这个问题有想法吗?(我正在使用hibernate4.0.1) 问题答案: 必须使用而不是使用来映射位置: 请注意,虽然这不是标准的JPA。
问题内容: 我有2个实体,和。它们是相关的,但是我不想将关系映射添加到bean。 我们如何 在 HQL或条件之间使用 左外部 联接 并 使用它们 ? 有一些解决方法, 按照此处所述使用本机SQL 。 添加关系并使用 从A选择a a左连接ab 。 我们可以在HQL中进行 内部 联接,例如从A a,B b中选择*,其中a.some = b.some 我一直回头看这两个选项,这还有其他选择吗?还是这不可
问题内容: 我有以下课程: 我想获取在类别中指定ID的广告资源。我正在尝试使用这个 我真的很困惑,请帮忙。谢谢。 问题答案: 好吧,没关系,我知道了怎么做 因此,我实际上想知道如何将类别与联接相关联,我在HQL文档中的“多态查询”下找到了答案。