检索SQL枚举会导致java.lang.ClassCastException:java.lang.Character无法强制转换为java.lang.String

时间:2010-08-25 13:01:58

标签: java jpa

我有这样的查询

Query importQuery = advertiserDao.getEntityManager().createNativeQuery(
    "select matching_type from group_key where key_id = " + Key.getkeyId());
String match = (String) importQuery.getSingleResult();

matching_typeenum('good', 'bad', 'repared')类型。这给出了如下例外:

java.lang.ClassCastException: java.lang.Character cannot be cast to java.lang.String

这是什么意思,实际值是一个字符串。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

尝试使用异常建议的java.lang.Character变量:

Character match = (Character) importQuery.getSingleResult();

答案 1 :(得分:0)

这很奇怪。根据官方文档,MySQL ENUM类型肯定应该作为String返回(实际上,任何MySQL数据类型都可以转换为String):

  

21.4.4.3. "Java, JDBC and MySQL Types"

     

MySQL Connector / J非常灵活   它处理之间的转换的方式   MySQL数据类型和Java数据类型。

     

通常,任何MySQL数据类型都可以   转换为java.lang.String,和   任何数字类型都可以转换为   任何Java数字类型,   虽然四舍五入,溢出或丢失   可能会出现精确度。

     

从Connector / J 3.1.0开始,   JDBC驱动程序将发出警告或   按原样抛出DataTruncation异常   JDBC规范要求   除非连接已配置   不要通过使用该属性这样做   jdbcCompliantTruncation并设置它   到false

     

始终的转化   保证工作列在   下表:

     

连接属性 - 其他。

These MySQL Data Types           | Can always be converted to these Java types
---------------------------------+---------------------------------------------
CHAR, VARCHAR, BLOB, TEXT, ENUM, | java.lang.String, java.io.InputStream,
and SET                          | java.io.Reader, java.sql.Blob, java.sql.Clob
---------------------------------+---------------------------------------------
     

ResultSet.getObject()方法   使用之间的类型转换   MySQL和Java类型,如下   适当的JDBC规范。   返回的值   ResultSetMetaData.GetColumnClassName()   也显示如下。更多   关于java.sql.Types的信息   类参见Java 2平台类型。

     

ResultSet.getObject()的MySQL类型到Java类型。

MySQL Type Name             | Return value of    | Returned as Java Class
                            | GetColumnClassName | 
----------------------------+--------------------+-----------------------
...                         | ...                | ...
----------------------------+--------------------+-----------------------
ENUM('value1','value2',...) | CHAR               | java.lang.String

我怀疑是JDBC驱动程序错误。你用的是什么版本?你能试试更新的版本吗?是否使用原始JDBC?