2017-11-08 9 views
0

以下のロジックについては、get例外(java.lang.StringIndexOutOfBoundsException:文字列インデックスが範囲外です。Hibernate createSQLQuery例外を与える - 文字列インデックスが範囲外です:0

私は性別が多くの場所でnullであることを確認しています。クエリ中にnullをチェックする他の方法はありますか?

beginTransaction(); 
     try { 
      SQLQuery q = getSession().createSQLQuery("SELECT DISTINCT " + 
                "ind.ind_id AS id, " + 
                "ind.IND_FNAME AS firstName, " + 
                "ind.IND_LNAME AS lastName, " + 
                "perInfo.IND_DOB AS dob, " + 
                "trc.trCTM_Grade_Mapping AS grade, " + 
                "TIMESTAMPDIFF(YEAR, perInfo.IND_DOB, NOW()) AS years, " + 
                "TIMESTAMPDIFF(MONTH, perInfo.IND_DOB, NOW()) AS months, " + 
                "perInfo.IND_SEX AS sex " + 
                 "FROM INDIVIDUALS ind " + 
                  "INNER JOIN USER_MEMBERSHIPS usm on usm.USR_ID = ind.IND_ID " + 
                  "INNER JOIN PERSONAL_INFO perInfo on perInfo.IND_ID = ind.IND_ID " + 
                  "INNER JOIN TRACKER_CUSTOM_DASHBOARD trcd on perInfo.IND_ID = trcd.USR_ID " + 
                  "INNER JOIN TRACKER_CUSTOM trc on trcd.trCTM_MainID = trc.trCTM_MainID " + 
                 "WHERE usm.GRP_ID = :GRP_ID ;"); 


      q.setInteger ("GRP_ID", groupId); 
      q.setResultTransformer (Transformers.aliasToBean (ImmunizationsComplianceDTO.class)); 
      result = q.list(); 
     }catch(RuntimeException e) { 
      rollbackTransaction(); 
      handleHibernateException(e); 
      throw e; 
     } finally { 
      closeTransaction(); 
     } 

答えて

0

私は変更を加えました。まだ運が単純にゲッターとセッターを追加するのではなく、同じ問題...

を持っていない、完全なゲッターセッターを以下に示し

if(gender != null){ 
       this.sex = gender; 
      } 

性別にnullチェックを追加しました。

// Getter setter for gender of the student. 
    public Character getSex() { 
     return sex; 
    } 
    public void setSex(Character gender) { 
     if(gender != null){ 
      this.sex = gender; 
     } 
    } 
0

だから、セックス/ジェンダー列がNULL値を持っていたようだし、その問題を克服するためには、クエリで

"COALESCE(perInfo.IND_SEX, '') AS sex" + 

を以下を追加しましたので、最終的なクエリは

beginTransaction(); 
     try { 
      SQLQuery q = getSession().createSQLQuery("SELECT DISTINCT " + 
                "ind.ind_id AS id, " + 
                "ind.IND_FNAME AS firstName, " + 
                "ind.IND_LNAME AS lastName, " + 
                "perInfo.IND_DOB AS dob, " + 
                "trc.trCTM_Grade_Mapping AS grade, " + 
                "TIMESTAMPDIFF(YEAR, perInfo.IND_DOB, NOW()) AS years, " + 
                "TIMESTAMPDIFF(MONTH, perInfo.IND_DOB, NOW()) AS months, " + 
          "COALESCE(perInfo.IND_SEX, '') AS gender" + 
                 "FROM INDIVIDUALS ind " + 
                  "INNER JOIN USER_MEMBERSHIPS usm on usm.USR_ID = ind.IND_ID " + 
                  "INNER JOIN PERSONAL_INFO perInfo on perInfo.IND_ID = ind.IND_ID " + 
                  "INNER JOIN TRACKER_CUSTOM_DASHBOARD trcd on perInfo.IND_ID = trcd.USR_ID " + 
                  "INNER JOIN TRACKER_CUSTOM trc on trcd.trCTM_MainID = trc.trCTM_MainID " + 
                 "WHERE usm.GRP_ID = :GRP_ID ;"); 


      q.setInteger ("GRP_ID", groupId); 
      q.setResultTransformer (Transformers.aliasToBean (ImmunizationsComplianceDTO.class)); 
      result = q.list(); 
     }catch(RuntimeException e) { 
      rollbackTransaction(); 
      handleHibernateException(e); 
      throw e; 
     } finally { 
      closeTransaction(); 
     } 
のように見えます
関連する問題