Java Hibernate left join fetch-仅获取第一个表的ID列表

Java Hibernate left join fetch-仅获取第一个表的ID列表,java,sql,oracle,hibernate,hql,Java,Sql,Oracle,Hibernate,Hql,我有下面的HQL查询,它工作得很好,但是它返回一个完整食物对象的列表。我只需要食物对象的ID,因为我需要更快的查询。请不要认为在Hibernate映射中,食物与食物有多对一的关系 hqlQuery = "from FooD d left join fetch d.bill where d.ts < :ts" 然后通过调用以下命令获取结果列表: hSession.createSQLQuery(sql).setTimestamp("ts", ts).list(); 但出现以下错误:“意外令

我有下面的HQL查询,它工作得很好,但是它返回一个完整食物对象的列表。我只需要食物对象的ID,因为我需要更快的查询。请不要认为在Hibernate映射中,食物与食物有多对一的关系

hqlQuery = "from FooD d left join fetch d.bill where d.ts < :ts"
然后通过调用以下命令获取结果列表:

hSession.createSQLQuery(sql).setTimestamp("ts", ts).list();
但出现以下错误:
“意外令牌:位于第1行附近”。

有人知道如何在使用Hibernate对FooB执行左外连接时仅获取食物ID吗?

更新:

我没有测试它,但这应该可以做到

SELECT d.id from FooD d inner join d.bill where d.ts < :ts
从食品d内部连接d.bill中选择d.id,其中d.ts<:ts
当您添加LEFT时,您会隐式地将其作为外部联接,如果您只需要通过键联接,则无需初始化bill


Hibernate要求对象位于select子句中,以便对其执行任何即时连接抓取

但既然你在d.bill上没有select或where条款,你为什么还要取它呢

如果您只需要id,为什么不这样做呢?没有理由进行冗余连接:

hqlQuery = "SELECT d.id from FooD d where d.ts < :ts" 
hqlQuery=“从食物d中选择d.id,其中d.ts<:ts”

如果您只需要b.id,并且将d.ts作为where子句,那么为什么您需要在同一查询中初始化d.bill?因为我只需要d.id有账单(d.bill是FooB.id)。请参见此问题:因为我需要获取所有有账单的食物(d.bill是链接到FooB.id的外键)。谢谢链接!但是我不明白如何使用它进行左连接。请使用exists关键字检查这些HQL示例:“from Cat where exists elements(Cat.kittens)”,但我认为您必须在select子句中完全包含该对象,如我所述(有关更多示例,请参阅)。如果您尝试删除“fetch”关键字,是否有效?你并不想初始化它,你只想加入(内部加入)
hSession.createSQLQuery(sql).setTimestamp("ts", ts).list();
SELECT d.id from FooD d inner join d.bill where d.ts < :ts
hqlQuery = "SELECT d.id from FooD d where d.ts < :ts"