我正在使用 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/