【发布时间】:2019-12-03 20:11:01
【问题描述】:
我为 PostgreSQL 创建了以下查询,该查询在 SqlWorkbench 中运行良好。但是当我将它集成到 Java 代码中时,我得到了一个语法错误异常:
查询在 SqlWorkbench 中运行良好:
ELECT poaiF.fnsku,
poaiF.acknowledgement_type_code AS last_ack_code
FROM po_acknowledgement_items poaiF,
(SELECT Max(poa.po_acknowledgement_id) AS last_po_ack_id,
poai.fnsku
FROM po_acknowledgement_items poai,
po_acknowledgements poa
WHERE poa.po_acknowledgement_id = poai.po_acknowledgement_id
AND poa.order_id = '5D7P2FLB'
GROUP BY poai.fnsku) t
WHERE t.last_po_ack_id = poaiF.po_acknowledgement_id
AND t.fnsku = poaiF.fnsku
Java 中的查询(在 (SELECT Max(poa.po_acknowledgement_id) AS last_po_ack_id) 开头给出语法错误:
private static final String LAST_ACK_CODE_QUERY1 = "SELECT poaiF.fnsku, \n" +
" poaiF.acknowledgement_type_code AS last_ack_code \n" +
"FROM po_acknowledgement_items poaiF, \n" +
" (SELECT Max(poa.po_acknowledgement_id) AS last_po_ack_id, \n" +
" poai.fnsku \n" +
" FROM po_acknowledgement_items poai, \n" +
" po_acknowledgements poa \n" +
" WHERE poa.po_acknowledgement_id = poai.po_acknowledgement_id \n" +
" AND poa.order_id = \'5D7P2FLB\' \n" +
" GROUP BY poai.fnsku) t \n" +
"WHERE t.last_po_ack_id = poaiF.po_acknowledgement_id \n" +
" AND t.fnsku = poaiF.fnsku";
通过集成测试运行查询时,出现以下错误:
unexpected token: ( 在第 4 行第 8 列附近,它是 (SELECT Max(poa.po_acknowledgement_id)
我正在运行org.springframework.orm.hibernate3.LocalSessionFactoryBean,如下所示。
SessionFactory postgresSessionFactory; //initialized with org.springframework.orm.hibernate3.LocalSessionFactoryBean class.
final Session session = postgresSessionFactory.getCurrentSession();
String query = LAST_ACK_CODE_QUERY;
final Query selectQuery = session.createQuery(query).setTimeout(queryTimeout);
final List<Object[]> terms = selectQuery.list();
请帮我解决这个问题。
【问题讨论】:
-
您需要
\'的转义符吗? -
今日提示:始终使用现代、明确的
JOIN语法。更容易编写(没有错误),更容易阅读和维护,如果需要更容易转换为外连接!
标签: java sql spring postgresql hibernate