2012-05-23 26 views
0

出了什麼毛病我HQL查詢?更改SQL一起HQL加入

String queryString = "SELECT A.INITIAL, A.NUMBER, A.OWNR_SCAC , A.INITIAL||A.NUMBER AS CAR," + 
      "A.LESSEE_SCAC, A.TRUK_CNT, A.EQP_TYP_CD, A.AXL_CNT, B.STABILITY_DEV_EQP," + 
      "A.C_CNT, A.G_WGT, B.TRUK_AXL_CNT, A.EIN FROM DS.E_UT AS A" + 
      "LEFT JOIN DS.E_PRIMARY AS B" + 
      "WHERE A.INITIAL||A.NUMBER IN (:carList) AND A.INITIAL IN {:initList) AND A.NUMBER IN (:numberList)" + 
      "AND B.TRUK_AXL_CNT > 0"; 

錯誤:

org.hibernate.hql.internal.ast.QuerySyntaxException:意外的標記:一個近線1,列263

我以爲這是在談論AFROM DS.E_UT AS A

+0

你能告訴你的Hibernate映射類或文件? –

回答

2

在HQL你給表和列名。相反,你給Java類名稱和成員變量名稱(或的getter/setter),你映射到表和列的類和成員變量的名稱。

+0

如果一個變量是另一個類(加入變量)...我如何引用? – JonH

+0

使用任一(例如)'從ClassA的內部聯接ClassB的其中ClassA.variable = ...'或'從ClassA的甲內部聯接ClassB的B,其中A.variable = ...' – Johanna

+0

確定現在即時得到「無效路徑:」 null.TRUK_AXL_CNT'當我添加ClassB.variable到查詢 – JonH

1

我想你應該在每一個新行添加一些空間。

"A.C_CNT, A.G_WGT, B.TRUK_AXL_CNT, A.EIN FROM DS.E_UT AS A" + 
"LEFT JOIN DS.E_PRIMARY AS B" 

將成爲:

A.C_CNT, A.G_WGT, B.TRUK_AXL_CNT, A.EIN FROM DS.E_UT AS ALEFT JOIN DS.E_PRIMARY AS B 

注意「ALEFT」

+0

是的,這也是一個問題... – JonH

1

我並不完全相信你的方案,或者如果這是你在找什麼,但你可以只映射您將表連在一起。這可能會使事情變得更容易,而且您不需要明確加入您的查詢。

Here is a small example

從例如一個簡單的查詢可能類似於:

SELECT p 
    FROM Person 
WHERE p.name like :name 
AND p.address.street like :street 
+0

所以,如果我這樣做?我的查詢將如何形成? – JonH

+1

你會寫你的查詢引用你的對象,因爲它們被命名在你的模式中,我添加了一個基於示例鏈接的示例。 –