【发布时间】:2012-08-09 09:45:41
【问题描述】:
我正在使用本机 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 为我使用别名的列抛出异常
请求处理失败;嵌套异常是 javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not execute query] 根本原因 java.sql.SQLException:未找到列“over_no”。
当我在我的 mysql 客户端上运行它并返回正确的数据集时,这个查询正在工作,但是当我在我的代码中运行它时,结果集以某种方式覆盖了 ref_player 表上的两个后续连接,给我留下了击球手的名字三列,即 batsman.sname、outBy.sname 和 fielder.sname 列中的同名。
最近两天我被困在这里,请任何帮助都会很棒。
【问题讨论】:
-
你是如何执行查询的?
-
Query query = em.createNativeQuery(sqlQuery); ((QueryImpl)query).getHibernateQuery().setResultTransformer(Transformers.TO_LIST);然后设置好参数后,List<List<Object>> result =query.getResultList(); -
@axtavt ......什么都没有...... ???
-
好的,感谢您的调查:)
-
您是否尝试过启用休眠 sql 日志记录以查看它在幕后将您的代码转换成什么?如果没有,请将以下内容添加到
标签内的 persistence.xml:
标签: mysql hibernate join nativequery