如果我在DBVisualizer中運行下面的查詢,它將返回一長串值(這是預期的和正確的結果),重複相同的列(從同一個表中一個Oracle 11數據庫)。所以,舉例來說,如果列的3 ID *,** FIRST_NAME和姓它會是這個樣子(我的道歉粗「圖」):SQL查詢僅返回SELECT語句中第一列的值
+-----+------------+-----------+----+------------+-----------+
| ID | FIRST_NAME | LAST_NAME | ID | FIRST_NAME | LAST_NAME |
| 2 | John | Doe | 3 | Jane | Doe |
然而,如果我運行一個Java Web應用程序相同的本地查詢(使用Hibernate 3.0,JPA 2.1)映射到上述的Oracle數據庫11的實體類,用下面的代碼片段:
List<ForeignParty> queryResult = null;
String sqlQuery = "SELECT f.*, p.POLICY_1_NUM, p.TOTAL_PAYOUT_AMT, f1.*, f2.*, f3.*, f4.* " +
"FROM FOREIGN_PARTY f " +
"LEFT JOIN POLICY_PAYMENT p ON f.FOREIGN_PARTY_ID = p.FOREIGN_PARTY_ID " +
"LEFT JOIN FOREIGN_PARTY f1 ON f.RELATED_PARTY_ID1 = f1.FOREIGN_PARTY_ID " +
"LEFT JOIN FOREIGN_PARTY f2 ON f.RELATED_PARTY_ID2 = f2.FOREIGN_PARTY_ID " +
"LEFT JOIN FOREIGN_PARTY f3 ON f.RELATED_PARTY_ID3 = f3.FOREIGN_PARTY_ID " +
"LEFT JOIN FOREIGN_PARTY f4 ON f.RELATED_PARTY_ID4 = f4.FOREIGN_PARTY_ID " +
"WHERE " +
"f.PARTY_TYPE_ID = '2' " +
"AND f.SOURCE_SYSTEM = :sourceSystem " +
"AND f.SOURCE_CLIENT_ID = :sourceClientId";
query = emFatca.createNativeQuery(sqlQuery, ForeignParty.class);
query.setParameter("sourceSystem", sourceSystem);
query.setParameter("sourceClientId", sourceClientId);
try {
queryResult = query.getResultList();
//This statement ensures that the PolicyPayment object does not go out of session scope
for (ForeignParty fp : queryResult) {
fp.getPolicyPaymentCollection().size();
}
} catch (NoResultException nre) {
nre.getMessage();
}
return queryResult;
...它只按照的規定返回所有列的值。 ,第一項在SELECT以上聲明。我通過臨時移動f4來驗證。中的項SELECT語句是該語句中的第一項,然後看到輸出中的值與那個特定別名的值相匹配。我想知道這是否與這樣的事實,即這是返回多個相同的名稱和相同的實體在一個記錄或行中的列,而不是單獨的記錄?我是否需要使用類似SqlResultSetMapping來爲結果的每次迭代分別設置別名?我認爲這將是很多工作,因爲會有許多列/別名來定義。任何幫助將不勝感激。謝謝!
我可能爲時過早(因爲我仍在添加代碼),但認爲我會分享它。我認爲,原因是Hibernate沒有提出關於結果集不明確的異常,只是添加了第一個SELECT列的值。所以,我從JOIN語句中手動爲每個別名設置單獨的列名和他們自己的別名。因此,例如,而不是使用_f1。* _,我手動將** f1.FOREIGN_PARTY_ID添加爲F1_FOREIGN_PARTY_ID **,依此類推。很多手動編碼,是的,但如果這解決了我的問題,我可以。 – Randy