ネイティブSQLクエリを使用しており、プレーヤーテーブルに3回参加します。最初に打者の名前を取得し、次にボウラーの名前を取得し、次に野手の名前を取得します。これで最初の結合が機能しますが、次の2つも同じ名前、つまり打者の名前を返します。
これが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;
選択した列にエイリアスを使用していません。使用したときに、エイリアスを使用する列に対して休止状態が例外をスローしたためです。
リクエストの処理に失敗しました。ネストされた例外はjavax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:クエリを実行できませんでした]ルート原因java.sql.SQLException:列'over_no'が見つかりません。
このクエリは、mysqlクライアントで実行すると機能し、正しいデータセットを返しますが、コードで実行すると、結果セットはref_playerテーブルの後続の2つの結合を何らかの形でオーバーライドし、3つの列すべてにbatsman名が残ります。つまり、batsman.sname、outBy.sname、fielder.snameの各列に同じ名前があります。
私はここ2日間ここで立ち往生しています、どんな助けでも素晴らしいでしょう。