0

我的 sudo 代码是,

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)"

我认为传递字符串数组会导致问题。

有人可以告诉我如何解决这个问题吗?

4

2 回答 2

2

当您调用第三方库并遇到此类错误时,您总是想知道您是否没有正确使用 API。在您的情况下,很容易从 JavaDoc 中看出正确的方法是setParameterList而不是setParameter. 请记住,JavaDoc 是您的圣经。

我正在为类 Query 复制粘贴 Hibernate 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.
于 2013-09-24T08:11:28.673 回答
0

1、你得到一个异常,因为你试图将一个数组 String[] 转换为一个对象 String,

//modify
getCurrentSession().createQuery(myQueryBuilder.toString()).setParameter("gender", Gender.MALE);
or
getCurrentSession().createQuery(myQueryBuilder.toString()).setParameter("gender", Gender.FEMALE);
于 2013-09-24T09:20:34.447 回答