当前位置: 首页 > 面试题库 >

Hibernate 4.3.6 QuerySyntaxException:预期加入的路径

令狐泓
2023-03-14
问题内容

HQL连接查询有问题。谁能告诉我我的下面加入HQL查询有什么问题?我正在使用Hibernate 4.3.6,JDK 7和Groovy 2.2

def query = 'select lip.referenceId from Parcel as lip left join TransportFile tf where lip.statusDisplayName != tf.statusDisplayName'
def hqlQuery = session.createQuery(query)
def hqlcount = hqlQuery.list().size

我在上面的代码中运行时遇到以下错误

com.dc.core.common.exception.BaseApplicationException: org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [select lip.referenceId from com.dc.apps.cp.ebilling.model.impl.Parcel as lip left join TransportFile tf where lip.statusDisplayName != tf.statusDisplayName]

以下是我的包裹实体

package com.dc.apps.cp.ebilling.model.impl
@Entity
@Audited
public class Parcel implements IPersistentEntityInstance {

private static final long                  serialVersionUID = 1L;
private Long                               id;
@AttributeReadPermission(name = "SUBMITTEDFILE.READ")
@AttributeWritePermission(name = "SUBMITTEDFILE.UPDATE")
private File                               submittedFile;
private ParcelType                  type;
private boolean                            isBeingSubmitted;
private TransportFile              transportFile;
}

以下是我的TransportFile实体

package com.dc.apps.cp.legacy.model.impl;
@Entity
@EntityMetadataDefaults(editable = false)
public class TransportFile implements ITransportObject {

private static final long          serialVersionUID = 1L;    
private Long                       id;
private String                     statusDisplayName;    
// [ReferenceID] [varchar](30) NOT NULL
private String                     referenceId;
// [sent] [datetime] NULL,
private Timestamp                  sentDate;
// [received] [datetime] NULL,
private Timestamp                  receivedDate;
// [Status] [varchar](4) NULL,
private String                     statusCode;
private List<TransportLog> TransportLogs;    
private String                     rejectionReason;
}

我参考了这篇文章HQL左联接:联接所需的路径,但是我的HQL联接查询没有任何磨损。


问题答案:

此异常 “预期加入的路径” 表示:

提供从一个实体到另一个实体的路径。连接由映射定义

因此,我们需要:

select lip.referenceId 
   from Parcel as lip 
   // instead of this
   // left join TransportFile tf 
   // we need a path from Parcel to TransportFile
   left join lip.transportFile tf 
   where lip.statusDisplayName != tf.statusDisplayName'
   ...

该语句left join TransportFile tf更像是SQL …对于HQL而言并非如此。

我们的声明必须表示导航:left join lip.transportFile tf-即加入transportFile与相关的lip



 类似资料:
  • 问题内容: 我刚进入hibernate状态,遇到了以下问题:我收到了 “希望加入的路径!” 当我尝试运行此查询时出现异常: 我想选择给定航班已售出机票的平均价格。 我的代码是: Flight.hbm.xml Ticket.hbm.xml 所有其他没有JOIN的查询都可以正常工作。我不知道问题出在哪里。 正确的查询是: 并与查询执行一起: 问题答案: 如您所链接的问题和Hibernate文档中所述,

  • 问题内容: 我刚进入休眠状态,遇到了以下问题:我收到了 “希望加入的路径!” 当我尝试运行此查询时出现异常: 我的代码是: Flight.hbm.xml Ticket.hbm.xml 所有其他没有JOIN的查询都可以正常工作。我不知道问题出在哪里。 正确的查询是: 并与查询执行一起: 问题答案: 如您所链接的问题和Hibernate文档中所述,实体之间的连接使用关联。所以正确的查询是 还要注意,与

  • 我刚开始Hibernate,遇到了以下问题:我得到了“加入的路径!” 尝试运行此查询时出现异常: 我想选择给定航班已售出的机票的平均价格。 我已经检查了这些链接,但我没有解决我的问题:HQL左连接:连接预期的路径hql内部连接预期的路径!错误 我的代码是: 航班.hbm.xml 票据.hbm.xml 没有JOIN的所有其他查询都可以正常工作。我不知道问题出在哪里。 正确的问题是: 连同查询执行:

  • 我有一个与mockMvc一起工作的JUnit测试,它会发生一些奇怪的事情。我的测试用例看起来像那样... 我希望它能起作用,但我收到了这条信息。 有人能帮我吗?在这种情况下,我用那些... 导入静态组织。汉克雷斯特。配对者*;

  • 我有一个字符串列表,它是从列表a中的查询返回的。 我尝试使用String utils.join将列表中的值组合成一个用逗号和引号分隔的字符串。但它并不像预期的那样工作。