在createQuery中使用SELECT DISTINCT返回列表值

时间:2013-08-25 11:09:03

标签: java hql dao

我无法从此代码中添加SELECT DISTINCT taxtCode

public List<TblTaxType> findAlltaxtCode(String bfnsCode) {
        List<TblTaxType> result = null;

        String hql = "select distinct(taxtCode) from TblTaxType tbl_tax_type WHERE bfnsCode = ?";
        try {

                setSession(HibernateUtil.getSession());

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


            if(!resultList.isEmpty()){  
                result = resultList; 
                Debugger.print("TAX CODES FOUND ");
            }else{
                Debugger.print("TAX CODES NOT FOUND ");
            }
        } catch (Exception e) {
            e.printStackTrace();
            Debugger.print(" TAX CODES NOT FOUND ");

        }

        Debugger.print(hql);
        closeSession();
        return result;
    }

更新为整个代码。查询是正确的,但它似乎没有返回列表值。仍然出现java.lang.String cannot be cast to com.test.test.TblTaxType错误。此查询如何返回值列表?每当添加单词DISTINCT时都会发生错误。在HQL中是否不可能使用distinct并返回一个值列表,如SQL Query?

4 个答案:

答案 0 :(得分:1)

您还可以同时使用标准和投影:

Criteria criteria = session.createCriteria(MyEntity.class);
criteria.setProjection(Projections.distinct(Projections.property( "id" )));

希望对某人有所帮助。

答案 1 :(得分:1)

使用GROUP BY解决问题,而不是使用DISTINCT

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

答案 2 :(得分:0)

当您使用FROM TblTaxType OR Select *开始查询时,它会返回包含所有表格列的表格行,并使用List <TblTaxType> DataType将其分配到列表中,因此不会出现任何错误

但是当你写Select colName时,它只返回该表格单元格中的字符串。它无法转换为java.lang.String cannot be cast to com.test.test.classes.TblTaxType

在Hibernate中使用Distinct没有问题。见这里: - How do you create a Distinct query in HQL

答案 3 :(得分:0)

使用hibernate执行此操作的权利是

select tbl_tax_type  FROM TblTaxType tbl_tax_type WHERE BFNS_CODE = ?

编辑2

获取不同列使用的具体列表:

select distinct(taxtCode) from TblTaxType WHERE BFNS_CODE = ?

并且在hibernate中你不必使用第一个select语句来获取列表,只需使用这样的from语句:

from TblTaxType where BFNS_CODE = ?