Mysql Hibernate本机查询,同一表上的多个联接返回错误结果

Mysql Hibernate本机查询,同一表上的多个联接返回错误结果,mysql,hibernate,join,nativequery,Mysql,Hibernate,Join,Nativequery,我使用的是一个原生sql查询,其中有一个玩家表,我加入了三次,首先是获得击球手的名字,然后是保龄球手的名字,然后是外野手的名字。现在,第一个连接起作用,但下两个连接也返回相同的名称,即击球手名称 下面是sql查询 我没有为所选列使用别名,因为当我使用别名时,hibernate为我使用别名的任何列引发了异常 请求处理失败;嵌套异常是javax.persistence.PersistenceException:org.hibernate.exception.sqlgrammareexception

我使用的是一个原生sql查询,其中有一个玩家表,我加入了三次,首先是获得击球手的名字,然后是保龄球手的名字,然后是外野手的名字。现在,第一个连接起作用,但下两个连接也返回相同的名称,即击球手名称

下面是sql查询

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

请求处理失败;嵌套异常是javax.persistence.PersistenceException:org.hibernate.exception.sqlgrammareexception:无法执行查询],根本原因是 java.sql.SQLException:未找到“over_no”列

当我在mysql客户端上运行该查询并返回正确的数据集时,该查询工作正常,但当我在代码中运行该查询时,结果集以某种方式覆盖了ref_player表上的两个后续联接,使我在所有三列中都有蝙蝠侠名称,即在batsman.sname、outBy.sname和fielder.sname列中的相同名称

我被困在这里两天了,请帮忙。

你试过换衣服吗

 order by over_no, delivery_no; 


这是一个关于Hibernate bug跟踪的悬而未决的问题

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


尝试用另一个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;

在上面的示例中,您实际上应该使用别名,否则您将有两个同名列,这将引发一个错误

发现相同的问题。 另一种解决方法是使用
org.hibernate.Session#doWork
并对JDBC连接执行查询:

entityManager.unwrap(Session.class).doWork(new Work() {
  void execute(Connection c) throws SQLException {
   PreparedStatement stmt = c.prepareStatement("SELECT ... JOIN ... JOIN ...");
   try {
     ...
   } finally {
     stmt.close() 
   }

如何准确执行查询?
query query=em.createNativeQuery(sqlQuery);((QueryImpl)query.getHibernateQuery().setResultTransformer(Transformers.TO_列表)
然后在设置参数后,
List result=query.getResultList()@axtavt。。。。。。没什么???好的,谢谢您的关注:)您是否尝试过启用HibernateSQL日志来查看它在幕后将代码转换成什么?如果没有,请将以下内容添加到标记内的persistence.xml中:谢谢通知。正如你所看到的,我没有太多的声誉:)Thanx很多人的回答,我会测试它,并张贴结果:)
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;
entityManager.unwrap(Session.class).doWork(new Work() {
  void execute(Connection c) throws SQLException {
   PreparedStatement stmt = c.prepareStatement("SELECT ... JOIN ... JOIN ...");
   try {
     ...
   } finally {
     stmt.close() 
   }