Hibernate HQL连接获取问题:别名关联

Hibernate HQL连接获取问题:别名关联,hibernate,Hibernate,假设我有一个对象A和一个集合B,我想得到A和符合特定条件的所有B "from A a left join fetch a.bs c where a.id = ? and c.id = ?" 上述方法肯定不起作用,因此在I aliasc之后必须进行另一次提取,这样是否正确 "from A a left join fetch a.bs c join fetch c.id = ? where a.id = ?" 由于语法无效,第二个查询无法工作。第一个可以,但是(我猜这里)不是你想要的方式 我想你

假设我有一个对象
A
和一个集合
B
,我想得到
A
和符合特定条件的所有
B

"from A a left join fetch a.bs c where a.id = ? and c.id = ?"
上述方法肯定不起作用,因此在I alias
c
之后必须进行另一次提取,这样是否正确

"from A a left join fetch a.bs c join fetch c.id = ? where a.id = ?"

由于语法无效,第二个查询无法工作。第一个可以,但是(我猜这里)不是你想要的方式

我想你想选择一些As,只使用满足特定标准的Bs来填充他们的Bs集合?你不能。将为每个A实例获取所有B的整个集合(撇开处理批量大小的技术含义不谈)。这样做是为了防止意外孤立的Bs如果您选择保存您的A备份与不完整的Bs收集


如果我误解了你的意思,请澄清你的问题。

为什么第一个查询不起作用?第二个肯定不行,完全正确。但在JPA第651页的Hibernate中,第一个要点让我相信这样的方法是可行的。所以本质上你说的是,我必须拉取整个Bs集合,然后迭代到集合,以寻找我要寻找的标准。如果你有这本书,也许你可以举一个例子,说明第一点的意思。我没有这本书。如果你在你的问题中贴上合适的引语(带有所需的上下文),我可以看一下。请注意,如果您的关联(A-B)是双向的,您可以只选择您想要的Bs(如果这对您的场景有意义的话),但是它们链接到的As在其集合中仍然有所有合适的Bs。@chssly76:那么让我问一下,假设我有一个域对象A,它有一组Bs,这种联系是双向的。现在我想做的是根据id选择一个特定的a,以及所有符合条件的B,例如,选择a,其中a.id=1,a.setofB,其中名称在setofB=‘query’中,您可以,但所说的B不会存储在a.Bs集合中。如果您只有一个a,那么可以编写一个查询,如“fromb,其中B.a.id=:id和B.name='query'”,然后您将得到一组B;每个都将指向同一个实例。一个实例将在其“Bs”集合中拥有其所有的Bs(而不仅仅是查询返回的Bs)。@chssly76:我刚刚看到了我想要的答案,u给出的唯一区别是我想要一个特定的播放器,那么在where子句中我可以添加“and p.id=1”吗?