Hibernate本机查询在同一个表上有多个连接返回错误的结果

khi*_*zar 7 mysql hibernate join nativequery

我正在使用本机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;
Run Code Online (Sandbox Code Playgroud)

我没有为所选列使用别名,因为当我这样做时,hibernate为我使用别名的任何列引发了异常

请求处理失败; 嵌套异常是javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:"over_no"未找到柱:与根源java.sql.SQLException中无法执行查询].

此查询工作时,我在我的MySQL客户端上运行它,并返回正确的数据集,但是当我在我的代码运行它,结果莫名其妙定置覆盖随后的两个上ref_player表连接,留下我的击球手的名字在所有三列,即batsman.sname,outBy.sname和fielder.sname列中的相同名称.

最近两天我被困在这里,请帮助一下.

mar*_*bog 5

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

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;
Run Code Online (Sandbox Code Playgroud)

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


Zah*_*iaz 2

这是 Hibernate bug 跟踪上的一个悬而未决的问题。

看到这张票

也在休眠论坛中。这清楚地表明这是一个休眠结束的错误。

请参阅 Hibernate 论坛讨论