“java.sql.SQLSyntaxErrorException:'on 子句'中的未知列'*'”在休眠条件下加入表时

Posted

技术标签:

【中文标题】“java.sql.SQLSyntaxErrorException:\'on 子句\'中的未知列\'*\'”在休眠条件下加入表时【英文标题】:"java.sql.SQLSyntaxErrorException: Unknown column '*' in 'on clause'" while joining table with conditions in hibernate“java.sql.SQLSyntaxErrorException:'on 子句'中的未知列'*'”在休眠条件下加入表时 【发布时间】:2018-04-02 03:59:19 【问题描述】:

我在休眠时遇到“java.sql.SQLSyntaxErrorException: Unknown column '*' in 'on Clause'”问题。

因为 jpql 不支持自连接,我正在尝试使用其他非常丑陋但有效的解决方案,其中包含很多“左连接”。 我经常遇到这个异常,而该列确实存在。行的一些随机替换(每行一个连接)可能会有所帮助,或者在另一个连接中设置一个连接的条件也可能会有所帮助。但我不明白为什么会这样!

当我只更改连接的顺序或将“on”条件设置为另一个连接或“where 子句”时,为什么使用一个相同的查询 hibernate 可以看到或取消看到某些列? 谢谢。

【问题讨论】:

【参考方案1】:

所以,事情就是这样。我有一个复杂的数据库,构建复杂的查询几乎总是以“'on 子句'中的未知列'*'”结束。

原因在于我的数据库本身和 mysql 查询优化器的结构。

我猜任何数据库都在尝试优化您的查询和连接顺序,以便根据每个表中的条目数量尽可能少地工作。

其中一张表只与另一张表有关系。由于只有一张表是一对一的关系,优化器几乎总是在完成所有其他工作之后加入它。但它不能这样做,因为它必须使用该表中的数据,最终将被连接。所以我不得不重构我的数据库并从 2 中创建 1 表,因为 2 表确实没有任何意义(我一开始这样做是为了使数据库尽可能面向未来)。

我希望它有所帮助。有什么不清楚的欢迎追问。

【讨论】:

以上是关于“java.sql.SQLSyntaxErrorException:'on 子句'中的未知列'*'”在休眠条件下加入表时的主要内容,如果未能解决你的问题,请参考以下文章