代码之家  ›  专栏  ›  技术社区  ›  pdorgambide

@带有“order by”(小写)的公式引发java.lang.StringIndexOutOfBoundsException

  •  0
  • pdorgambide  · 技术社区  · 5 年前

    java.lang.StringIndexOutOfBoundsException异常

        public class User {
           @Formula("(SELECT string_agg(_a._teamname,';') FROM (SELECT t.name as _teamname FROM team t, teammember tm WHERE tm.team=t.id AND tm.user=id order by t.name) AS _a)")
           proctected String teamNames;
        }
    

    Hibernate-core-5.4.20版本

    1 回复  |  直到 5 年前
        1
  •  0
  •   pdorgambide    5 年前

    hibernate计算subselectQueryFragment时,检测到的索引无效: formIndex>orderByIndex公司 . 可以使用变通方法

    Hibernate-core-5.4.20版本

        org.hibernate.engine.spi.SubselectFetch.createSubselectFetchQueryFragment(QueryParameters)
    
        final int fromIndex = getFromIndex( queryString );
        final int orderByIndex = queryString.lastIndexOf( "order by" );
        final String subselectQueryFragment =  orderByIndex > 0
                    ? queryString.substring( fromIndex, orderByIndex )   // -> java.lang.StringIndexOutOfBoundsException 
                    : queryString.substring( fromIndex );
    

    Hibernate生成queryString

       select 
         (...)
         (SELECT string_agg(_a._teamname,';') FROM (SELECT t.name as _teamname FROM team t, teammember tm WHERE tm.team=t.id AND tm.user=:id order by t.name) AS _a) as formula2_2_
         from 
           teammember teammember0_ 
         where (... without order by)