2013-09-24 45 views
0

我須藤代碼,越來越拋出ClassCastException上傳遞的字符串數組中的Java

getCurrentSession().createQuery(myQueryBuilder.toString()).setParameter("gender", new String[] { Gender.MALE, Gender.FEMALE }); 

,而在運行時運行查詢,我得到錯誤

java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to java.lang.String 
    at org.hibernate.type.StringType.toString(StringType.java:44) 
    at org.hibernate.type.NullableType.toLoggableString(NullableType.java:218) 
    at org.hibernate.pretty.Printer.toString(Printer.java:76)" 

我想傳遞的字符串數組是造成問題。

有人可以告訴我如何解決這個問題嗎?

+0

MALE,FEMALE是類Gender中的公共靜態最終字符串。 – Krishna

+0

難道你不需要設置Gender.MALE或Gender.FEMALE INSTEAD都??? – agad

+2

什麼預計將傳遞給setParameter? –

回答

1

當你打電話給第三方庫時,你會得到這種類型的錯誤,你總是想知道你是否沒有正確使用API​​。在你的情況下,很容易從JavaDoc中看到正確的方法是setParameterList而不是setParameter。請記住,JavaDoc是你的聖經。

我正在休眠3.3的Javadoc的複製粘貼該類查詢:

Query setParameter(int position, Object val) 
      Bind a value to a JDBC-style query parameter. 
Query setParameter(int position, Object val, Type type) 
      Bind a value to a JDBC-style query parameter. 
Query setParameter(String name, Object val) 
      Bind a value to a named query parameter. 
Query setParameter(String name, Object val, Type type) 
      Bind a value to a named query parameter. 
Query setParameterList(String name, Collection vals) 
      Bind multiple values to a named query parameter. 
Query setParameterList(String name, Collection vals, Type type) 
      Bind multiple values to a named query parameter. 
Query setParameterList(String name, Object[] vals) 
      Bind multiple values to a named query parameter. 
Query setParameterList(String name, Object[] vals, Type type) 
      Bind multiple values to a named query parameter. 
Query setParameters(Object[] values, Type[] types) 
      Bind values and types to positional parameters. 
0

1,你得到一個例外,因爲你想投一個數組的String []一個對象字符串,

//modify 
getCurrentSession().createQuery(myQueryBuilder.toString()).setParameter("gender", Gender.MALE); 
or 
getCurrentSession().createQuery(myQueryBuilder.toString()).setParameter("gender", Gender.FEMALE);