下面是該查詢例如,我執行javax.persistence.Query不設置參數
entityManager.createNativeQuery(SHIPMENTS_UNION_QUERY, RESULT_MAPPER)
.setParameter("aggreagateCategories", aggregatePCNames)
.setParameter("startDate", startDate)
.setParameter("endDate", endDate)
.setParameter("individualCategories", individualPCNames)
.getResultList();
的日誌,上面一行的執行是
12:29:36.909 DEBUG org.hibernate.loader.Loader : bindNamedParameters() 2010-01-01 -> endDate [3]
12:29:36.910 DEBUG org.hibernate.loader.Loader : bindNamedParameters() 2010-01-01 -> endDate [6]
12:29:36.910 DEBUG org.hibernate.loader.Loader : bindNamedParameters() 'AirConditioner' -> aggreagateCategories [1]
12:29:36.912 DEBUG org.hibernate.loader.Loader : bindNamedParameters() 2010-01-01 -> startDate [2]
12:29:36.912 DEBUG org.hibernate.loader.Loader : bindNamedParameters() 2010-01-01 -> startDate [5]
12:29:36.912 DEBUG org.hibernate.loader.Loader : bindNamedParameters() 'Cooler', 'Heater', 'Dryer' -> individualCategories [4]
當上述查詢執行param硬編碼到查詢本身,查詢執行得很好,結果被提取並映射到對應於@SqlResultSetMapping的RESULT_MAPPER,但是當使用上述setParameter語句完成時,執行不會返回任何結果..
請幫助確定問題。
EDIT1
硬編碼查詢
SELECT ac.category_name category_name, SUM(ais.volume) volume, qc.date, qc.quarter as quarter, qc.year
FROM actual_industry_shipment ais
JOIN quarter_calendar qc ON ais.quarter=qc.id
JOIN product_category pc ON ais.product_category_id=pc.id
JOIN aggregated_product_categories ac ON ac.id = pc.aggregate_category_id
WHERE ac.category_name IN ('AirConditioner')
AND qc.date BETWEEN '2010-01-01' AND '2011-01-01'
GROUP BY pc.aggregate_category_id, qc.quarter, qc.year
UNION
SELECT pc.category_name category_name, ais.volume volume, qc.date, qc.quarter as quart, qc.year
FROM actual_industry_shipment ais
JOIN quarter_calendar qc ON ais.quarter=qc.id
JOIN product_category pc ON ais.product_category_id=pc.id
WHERE pc.category_name IN ('Dryer', 'Cooler')
AND qc.date BETWEEN '2010-01-01' AND '2011-01-01'
使用參數查詢
SELECT ac.category_name category_name, SUM(ais.volume) volume, qc.date, qc.quarter as quarter, qc.year
FROM actual_industry_shipment ais
JOIN quarter_calendar qc ON ais.quarter=qc.id
JOIN product_category pc ON ais.product_category_id=pc.id
JOIN aggregated_product_categories ac ON ac.id = pc.aggregate_category_id
WHERE ac.category_name IN (?)
AND qc.date BETWEEN ? AND ?
GROUP BY pc.aggregate_category_id, qc.quarter, qc.year
UNION
SELECT pc.category_name category_name, ais.volume volume, qc.date, qc.quarter as quart, qc.year
FROM actual_industry_shipment ais
JOIN quarter_calendar qc ON ais.quarter=qc.id
JOIN product_category pc ON ais.product_category_id=pc.id
WHERE pc.category_name IN (?)
AND qc.date BETWEEN ? AND ?
即在代碼中聲明
原生查詢
private static final String SHIPMENTS_UNION_QUERY =
"SELECT ac.category_name category_name, SUM(ais.volume) volume, qc.date, qc.quarter as quarter, qc.year " +
"FROM actual_industry_shipment ais " +
"JOIN quarter_calendar qc " +
"ON ais.quarter=qc.id " +
"JOIN product_category pc " +
"ON ais.product_category_id=pc.id " +
"JOIN aggregated_product_categories ac " +
"ON ac.id = pc.aggregate_category_id " +
"WHERE " +
"ac.category_name IN (:aggreagateCategories) " +
"AND qc.date BETWEEN :startDate AND :endDate " +
"GROUP BY " +
"pc.aggregate_category_id, qc.quarter, qc.year " +
"UNION " +
"SELECT pc.category_name category_name, ais.volume volume, qc.date, qc.quarter as quart, qc.year " +
"FROM actual_industry_shipment ais " +
"JOIN quarter_calendar qc " +
"ON ais.quarter=qc.id " +
"JOIN product_category pc " +
"ON ais.product_category_id=pc.id " +
"WHERE pc.category_name IN (:individualCategories) " +
"AND qc.date BETWEEN :startDate AND :endDate";
您可以添加代碼SHIPMENTS_UNION_QUERY以及其導致了問題? – developer
請發佈您嘗試執行的查詢。 –
發現問題,我一直髮送參數到IN子句作爲引用文本,而不是列表中的setParameter,但它僅在休眠支持 –