【问题标题】:HQL Left Join - org.hibernate.hql.internal.ast.ErrorCounter - Path expected for joinHQL 左连接 - org.hibernate.hql.internal.ast.ErrorCounter - 连接的预期路径
【发布时间】:2016-10-15 00:15:48
【问题描述】:

在执行下面的代码时,我得到了这个异常

错误 org.hibernate.hql.internal.ast.ErrorCounter - 预期路径 加入!

数据库视图的实体类:

@NamedQueries({
@NamedQuery(name = "find", 
            query = "SELECT v.cxxx, trk.cxxx, trk.ixxx"
        + "FROM AxxxCxxx as v LEFT JOIN AxxxCxxxTxxx as trk "
        + "ON v.cxxx = trk.cxxx "
        )
})

@Entity
@Table(name = "V_XXX")
public class AxxxCxxx implements Serializable {

private static final long serialVersionUID = 1L;

@Id
@Column(name = "CXXX")
private String cxxx;
//getter, setter 
}

数据库表的Entity1类:

@Entity
@Table(name = "T_XXX")
public class AxxxCxxxTxxx extends Super implements
    Serializable {

private static final long serialVersionUID = 1L;

@Column(name = "CXXX")
private String cxxx;
//getter, setter
}

超类:

@MappedSuperclass
public abstract class Super implements Serializable {
private static final long serialVersionUID = -1413197336548058176L;

@Id
@Column(name = "TXXX", nullable = false)
private Integer txxx;

@Column(name = "IXXX", length = 15)
private String ixxx;
//getter, setter

}

当我尝试执行 NamedQuery 时,我得到了这个异常:

Caused by: org.hibernate.HibernateException: Errors in named queries: find
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:504)
at org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
... 26 more

org.hibernate.hql.internal.ast.QuerySyntaxException: Path expected for join! [SELECT v.cxxx, trk.cxxx, trk.ixxx"
    + "FROM AxxxCxxx as v LEFT JOIN AxxxCxxxTxxx as trk "
    + "ON v.cxxx = trk.cxxx]
org.hibernate.hql.internal.ast.InvalidPathException: Invalid path: 'trk.ixxx'
at org.hibernate.hql.internal.ast.util.LiteralProcessor.lookupConstant(LiteralProcessor.java:114) ~[hibernate-core-5.0.5.Final.jar:5.0.5.Final]

请,有人可以帮助我吗?如何使用 JPQL for MappedSuperClass 解决视图和表的左连接问题?

【问题讨论】:

  • 你是怎么解决的???

标签: java hibernate jpa hql jpql


【解决方案1】:

如果要在 JPQL 查询中使用 JOIN,则需要映射实体之间的关系。

有点像

  FROM AxxxCxxx as v INNER JOIN v.axxxCxxxTxxx as trk.

其中axxxCxxxTxxx 是在AxxxCxxx 类中声明的字段,并根据数据库结构正确映射。

更多信息可以通过herehere获取

【讨论】:

    【解决方案2】:

    您必须使用 @NamedNativeQuery 进行 SQL 查询。使用@NamedQuery,查询表达式是 HQL。

    考虑到上面的映射,你不能真正做HQL join,你可以只使用笛卡尔积

    @NamedQuery(name = "find", 
            query = "select v.cxxx, trk.cxxx, trk.ixxx "
        + "from AxxxCxxx as v, AxxxCxxxTxxx as trk "
        + "where v.cxxx = trk.cxxx "
        )
    

    })

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-21
      • 2012-05-14
      • 1970-01-01
      • 1970-01-01
      • 2011-04-24
      相关资源
      最近更新 更多