【发布时间】:2011-11-15 15:43:36
【问题描述】:
我有以下 HQL 查询,它工作正常,但是它返回一个完整的 FooD 对象列表。我只需要 FooD 对象的 ID,因为我需要更快的查询。请注意,在 Hibernate 映射中,FooD 与 FooB 是多对一的关系。
hqlQuery = "from FooD d left join fetch d.bill where d.ts < :ts"
然后我尝试使用相同类型的 HQL 查询仅获取 ID:
hqlQuery = "SELECT d.id from FooD d left join fetch d.bill where d.ts < :ts"
我收到“查询指定连接提取,但提取关联的所有者不在选择列表中”。
然后我将查询转换为常规 Oracle SQL 以仅获取 FooD.ID:
sqlQuery = "SELECT d.id from FooD d LEFT OUTER JOIN FooB b on d.foodId=b.id where d.ts < :ts"
然后我像这样映射 FooD 和 FooB 对象:
sqlQuery.addEntity(FooD.class);
sqlQuery.addEntity(FooB.class);
然后通过调用得到结果列表:
hSession.createSQLQuery(sql).setTimestamp("ts", ts).list();
但出现以下错误:"unexpected token: on near line 1".
在使用 Hibernate 对 FooB 进行左外连接时,是否有人知道如何仅获取 FooD 的 ID?
【问题讨论】:
-
如果你只需要b.id,并且where子句有d.ts,为什么还要在同一个查询中初始化d.bill呢?
-
因为我只需要 d.id 有账单(d.bill 是 FooB.id)。
标签: java sql oracle hibernate hql