簡體   English   中英

HQL左聯接-org.hibernate.hql.internal.ast.ErrorCounter-聯接的預期路徑

[英]HQL Left Join - org.hibernate.hql.internal.ast.ErrorCounter - Path expected for join

在執行以下代碼時,我遇到了這個異常

錯誤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為MappedSuperClass解決視圖和表的左連接問題?

您必須使用@NamedNativeQuery進行SQL查詢。 使用@NamedQuery時,查詢表達式為HQL。

考慮到上述映射,您不能真正使HQL加入,只能使用笛卡爾積

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

})

如果要在JPQL查詢中使用JOIN,則需要映射實體之間的關系。

就像是

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

其中axxxCxxxTxxx是在AxxxCxxx類中聲明的字段,並根據數據庫結構正確映射。

其他信息可以在這里這里獲得

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM