2017-01-07 8 views
1

私のDAOImplementでSpring mvc、Hibernate、およびMysqlを使用していますが、sqlファイルのoutsiteを呼び出しています。パラメータインデックスが範囲外です(1>パラメータ数、0)。

これは私のDAOです:

public List<RenterDto> searchByNamePersonalId(String name, String personalId) { 
    Session session = sessionFactory.openSession(); 
    String sqlString = GetSqlUtils.getSqlQueryString(RenterDaoImpl.class, SQL_DIR + SEARCH_BY_NAME_PERSON); 
    List<RenterDto> list = new ArrayList<RenterDto>(0); 
    try { 
     Query query = session.createSQLQuery(sqlString); 
     query.setParameter(0, name); 
     query.setParameter(1, personalId); 
     list = query.setResultTransformer(new AliasToBeanResultTransformer(RenterDto.class)).list(); 
    } catch (HibernateException e) { 
     logger.error("error at RenterDaoImpl.searchByNameAddress: " + e.getMessage()); 
    } finally { 
     session.close(); 
    } 
    return list; 
} 

(SEARCH_BY_NAME_PERSON)と呼ばれる私のSQL、名前とpersonalId検索に使用:私はキーワードで検索する場合

SELECT 
    R.ID, 
    R.NAME, 
    R.ACCOUNT_ID, 
    R.OTP_CODE, 
    R.OS_TYPE, 
    R.MANCHINID, 
    R.TYPE, 
    R.PERSONAL_ID, 
    R.PHONENUMBER, 
    R.EMAIL, 
    R.ADDRESS, 
    R.DISTRICT_ID, 
    D.NAME AS DISTRICT_NAME, 
    R.CITY_ID, 
    C.NAME AS CITY_NAME 
FROM 
    RENTER R 
INNER JOIN 
    DISTRICT D 
ON 
    R.DISTRICT_ID = D.ID 
INNER JOIN 
    CITY C 
ON 
    R.CITY_ID = C.ID 
WHERE 
    LOWER(R.NAME) 
LIKE 
    ('%'||'?') 
OR 
    R.PERSONAL_ID 
LIKE 
    '%'||'%' 

を '名前' または 'personalId'

SqlExceptionHelper - SQL Error: 0, SQLState: S1009 
SqlExceptionHelper - Parameter index out of range (1 > number of parameters, which is 0). 
RenterDaoImpl - error at RenterDaoImpl.searchByNameAddress: could not execute query 

この問題を解決するにはどうすればよいですか?どうもありがとうございます !私はあなたが'?'パラメータになりたいことを推測してい

LIKE ('%'||'?') 

答えて

1

あなたはこの表現を持っています。しかし、文字列は単なる疑問符でしかありません。

代わり

:一般的に

LIKE CONCAT('%', ?) 

、MySQLでは、あなたは文字列の連結のためのCONCAT()を使用したいです。

+0

ありがとう、それは私のために働いて^^ –

関連する問題