更新
错误说:
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();
答案 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中或必须位于聚合函数中