gpt4 book ai didi

hibernate - 当我在 hql 中使用 join 关键字时,为什么会得到 Path Expected for join

转载 作者:行者123 更新时间:2023-12-02 23:59:29 24 4
gpt4 key购买 nike

我有以下 HQL

String FIND_PRODUCT_CLASS_ID = "SELECT pc.id FROM ProductClass pc"+ 
" JOIN ProductGroup pg ON pc.id = pg.productClassId" +
" JOIN Product p ON pg.id = p.id" +
" JOIN ProductSub ps ON p.id = ps.productId WHERE ps.id =:childProductSubId";

当我在 Spring Hibernate 环境中运行此查询时,我得到以下堆栈跟踪。

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [SELECT pc.id FROM com.xxx.domain.ProductClass pc JOIN ProductGroup pg ON pc.id = pg.productClassId JOIN Product p ON pg.id = p.id JOIN ProductSub ps ON p.id = ps.productId WHERE ps.id =:childProductSubId]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:91)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:109)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:284)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:206)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:158)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:126)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:88)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:167)
at org.hibernate.internal.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:301)
at org.hibernate.internal.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:236)
at org.hibernate.internal.SessionImpl.createQuery(SessionImpl.java:1800)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:328)
... 146 more

但是,如果我修改不带 join 关键字的查询,如下所示,则成功。

String FIND_PRODUCT_CLASS_ID = "SELECT pc.id FROM ProductClass pc, ProductGroup pg, " +
" Product p, ProductSub ps where pc.id = pg.productClassId "+
" and pg.id = p.id and p.id = ps.productId and ps.id =:childProductSubId";

我知道我已经找到了解决方案,但我不确定为什么它不适用于 HQL 中的 join 关键字。有人可以向我解释一下吗?这与映射有关吗?在我的例子中,对象映射到 Hibernate 层。

最佳答案

我们需要在 HQL 查询中提供路径。这就是“加入的预期路径”即将出现的异常。

更改查询如下:请根据使用情况进行编辑

String FIND_PRODUCT_CLASS_ID = "SELECT pc.id FROM ProductClass pc"+ 
" JOIN pc.ProductGroup pg " +
" JOIN pg.Product p " +
" JOIN p.ProductSub ps WHERE ps.id =:childProductSubId";'

请引用this .

关于hibernate - 当我在 hql 中使用 join 关键字时,为什么会得到 Path Expected for join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43672196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com