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列中的相同名称.
最近两天我被困在这里,请帮助一下.
尝试将您的选择包装在另一个选择语句中,它应该可以工作。我正在使用存储过程,但它应该没有任何区别
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)
在上面你实际上应该使用别名,否则你将有两列同名,这将引发错误