java.lang.String无法强制转换为HQL

时间:2013-08-25 10:15:40

标签: java sql hql dao

更新

错误说:

ava.lang.String cannot be cast to com.test.test.classes.TblTaxType

当我添加标记select distinct taxtcode时出现错误。但当我删除像FROM tblTaxType tbl_tax_type WHERE bfnsCode = ?这样的select标签时,一切都很好。原因是什么?这是我的代码:

String hql = "SELECT DISTINCT TAXT_CODE FROM tbl_tax_type WHERE BFNS_CODE = ?";
        try {

                setSession(HibernateUtil.getSession());

                @SuppressWarnings("unchecked")
                List <TblTaxType>  resultList = getSession().createSQLQuery(hql)
                                                            .setString(0, bfnsCode)
                                                            .list();

3 个答案:

答案 0 :(得分:1)

您的实体可能名为TblTaxType,而不是tblTaxType。案件很重要。

附注:不要将sql命名为HQL查询。 SQL和HQL是不同的语言。

答案 1 :(得分:0)

使用GROUP BY解决它,而不是使用DISTINCT

String hql = "FROM TblTaxType tbl_tax_type WHERE bfnsCode = ? GROUP BY taxtCode";

答案 2 :(得分:0)

您的查询返回TAXT_CODE,此字段是TblTaxType实体的属性,因此您无法在主实体中强制转换一个属性(字符串)。这就是你错误的原因。

如果您需要完整的实体,则必须更改查询,但DISTINCT在这种情况下无用,因为如果您提取完整实体,则会出现ID字段(每行不同)。如果你想要第一个元素,可以使用LIMIT 1(是MySql)添加查询ORDER BY子句。

使用GROUP BY的解决方案仅在您使用MySql作为DBMS时才有效,因为如果您有Sql Server,则字段列表/分组依据的正确行为是:字段列表中的字段必须位于GROUP BY cluse中或必须位于聚合函数中