mysql - 在同一个表上具有多个连接的 Hibernate native 查询返回错误结果

标签 mysql hibernate join nativequery

我正在使用 native sql 查询,其中我有一个玩家表,我加入了三次,首先是获取击球手姓名,然后是投球手姓名,然后是外野手姓名。现在第一个连接有效,但接下来的两个也返回相同的名字,即击球手的名字。

这是sql查询

 select 
    del.over_no , 
    del.delivery_no , 
    batsman.sname , 
    outType.name , 
    outBy.sname , 
    fielder.sname , 
    bep.runs, 
    bep.deliveries, 
    bep.fours, 
    bep.sixes

    from delivery del 
    INNER JOIN batsman_performance bep ON del.innings_id=bep.innings_id 
    INNER JOIN ref_player batsman ON del.batsman_id = batsman.id
    INNER JOIN ref_player outBy ON del.bowler_id = outBy.id
    LEFT OUTER JOIN ref_player fielder ON del.fielder_id1= fielder.id
    INNER JOIN ref_out_type outType ON del.out_type_id=outType.id
    and del.out_type_id IS NOT NULL 
    and del.innings_id=:innings_id 
    and bep.player_id = del.batsman_id
    order by over_no, delivery_no;

我没有为选定的列使用别名,因为当我这样做时,hibernate 会为我使用别名的任何列抛出异常

Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query] with root cause java.sql.SQLException: Column 'over_no' not found.

当我在我的 mysql 客户端上运行这个查询并返回正确的数据集时,这个查询是有效的,但是当我在我的代码中运行它时,结果集以某种方式覆盖了 ref_player 表上的两个后续连接,给我留下了所有的击球手名字三列,即 batsman.sname、outBy.sname 和 fielder.sname 列中的相同名称。

过去两天我被困在这里,请提供任何帮助。

最佳答案

尝试将您的 select 包装在另一个 select 语句中,它应该可以工作。 我正在使用存储过程,但它应该没有任何区别

SELECT * FROM (

SELECT 
    del.over_no , 
    del.delivery_no , 
    batsman.sname , 
    outType.name , 
    outBy.sname , 
    fielder.sname , 
    bep.runs, 
    bep.deliveries, 
    bep.fours, 
    bep.sixes

    from delivery del 
    INNER JOIN batsman_performance bep ON del.innings_id=bep.innings_id 
    INNER JOIN ref_player batsman ON del.batsman_id = batsman.id
    INNER JOIN ref_player outBy ON del.bowler_id = outBy.id
    LEFT OUTER JOIN ref_player fielder ON del.fielder_id1= fielder.id
    INNER JOIN ref_out_type outType ON del.out_type_id=outType.id
    and del.out_type_id IS NOT NULL 
    and del.innings_id=:innings_id 
    and bep.player_id = del.batsman_id
    order by over_no, delivery_no
) AS subselection;

在上面你实际上应该使用别名,否则你将有两个同名的列,这将引发错误

关于mysql - 在同一个表上具有多个连接的 Hibernate native 查询返回错误结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11929634/

相关文章:

mysql - 如何通过查询更改 'post_modify'?

android - 检查光标是否包含行结果?

java - hibernate中的 session 和 session 工厂

java - Hibernate针对简单查询和海量数据的性能提升

mysql - 两张表的sql排序

sql - 具有独特值(value)观的自加入

php - 检查用户名是否已被使用

mysql - 如何将mysql驱动添加到openshift tomcat

java - 如何使用 Hibernate/Spring/Tomcat 拦截 JDBC 查询?

mysql - 不同表上多个 COUNT 的总和