MySQL 查询在 Workbench 中有效,但休眠抛出 MySQLSyntaxErrorException
MySQL query works in Workbench but hibernate throws MySQLSyntaxErrorException
我有一个查询,它给我带来了 2 个结果。当我在 MySQL Workbench 上使用它时它工作正常,但是当我在我的休眠映射上使用它作为公式时,我收到此错误:
SEVERE: Servlet.service() for servlet [FacesServlet] in context with
path [/glic_web_admin] threw exception
[javax.persistence.PersistenceException:
org.hibernate.exception.SQLGrammarException: could not extract
ResultSet] with root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an
error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near
'shipmentre0_.SEPARATOR ', ') FROM glic_shipment s LEFT OUTER JOIN
glic_shipment' at line 1
这是我在休眠映射中的 SQL 查询:
<property name="supplier" type="java.lang.String"
formula="(SELECT GROUP_CONCAT(pnSon.supplier SEPARATOR ', ')
FROM glic_shipment s
LEFT OUTER JOIN glic_shipment sSon ON sSon.id_shipment_parent = s.id
LEFT OUTER JOIN glic_rel_purchase_shipment_common_data pscdSon ON pscdSon.id = sSon.id_common_data
LEFT OUTER JOIN glic_purchase_notice pnSon ON pnSon.id = pscdSon.id_purchase_notice)" />
此查询的预期输出是一个将结果串联起来的字符串。我知道这是一个语法问题,但我没有找到解决方法。
编辑:
这是休眠正在执行的查询:
(SELECT GROUP_CONCAT(pnSon.supplier shipmentre0_.SEPARATOR ', ') FROM glic_shipment s LEFT OUTER JOIN glic_shipment sSon ON sSon.id_shipment_parent = s.id LEFT OUTER JOIN glic_rel_purchase_shipment_common_data pscdSon ON pscdSon.id = sSon.id_common_data LEFT OUTER JOIN glic_purchase_notice pnSon ON pnSon.id = pscdSon.id_purchase_notice) as formula27_0_
我该如何解决这个问题?
你还没有写SEPARATOR ', '
尝试如下:
<property name="supplier" type="java.lang.String"
formula="(SELECT GROUP_CONCAT(pnSon.supplier, ' ')
FROM glic_shipment s
LEFT OUTER JOIN glic_shipment sSon ON sSon.id_shipment_parent = s.id
LEFT OUTER JOIN glic_rel_purchase_shipment_common_data pscdSon ON pscdSon.id = sSon.id_common_data
LEFT OUTER JOIN glic_purchase_notice pnSon ON pnSon.id = pscdSon.id_purchase_notice)" />
我有一个查询,它给我带来了 2 个结果。当我在 MySQL Workbench 上使用它时它工作正常,但是当我在我的休眠映射上使用它作为公式时,我收到此错误:
SEVERE: Servlet.service() for servlet [FacesServlet] in context with path [/glic_web_admin] threw exception [javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'shipmentre0_.SEPARATOR ', ') FROM glic_shipment s LEFT OUTER JOIN glic_shipment' at line 1
这是我在休眠映射中的 SQL 查询:
<property name="supplier" type="java.lang.String"
formula="(SELECT GROUP_CONCAT(pnSon.supplier SEPARATOR ', ')
FROM glic_shipment s
LEFT OUTER JOIN glic_shipment sSon ON sSon.id_shipment_parent = s.id
LEFT OUTER JOIN glic_rel_purchase_shipment_common_data pscdSon ON pscdSon.id = sSon.id_common_data
LEFT OUTER JOIN glic_purchase_notice pnSon ON pnSon.id = pscdSon.id_purchase_notice)" />
此查询的预期输出是一个将结果串联起来的字符串。我知道这是一个语法问题,但我没有找到解决方法。
编辑: 这是休眠正在执行的查询:
(SELECT GROUP_CONCAT(pnSon.supplier shipmentre0_.SEPARATOR ', ') FROM glic_shipment s LEFT OUTER JOIN glic_shipment sSon ON sSon.id_shipment_parent = s.id LEFT OUTER JOIN glic_rel_purchase_shipment_common_data pscdSon ON pscdSon.id = sSon.id_common_data LEFT OUTER JOIN glic_purchase_notice pnSon ON pnSon.id = pscdSon.id_purchase_notice) as formula27_0_
我该如何解决这个问题?
你还没有写SEPARATOR ', '
尝试如下:
<property name="supplier" type="java.lang.String"
formula="(SELECT GROUP_CONCAT(pnSon.supplier, ' ')
FROM glic_shipment s
LEFT OUTER JOIN glic_shipment sSon ON sSon.id_shipment_parent = s.id
LEFT OUTER JOIN glic_rel_purchase_shipment_common_data pscdSon ON pscdSon.id = sSon.id_common_data
LEFT OUTER JOIN glic_purchase_notice pnSon ON pnSon.id = pscdSon.id_purchase_notice)" />