【问题标题】:Use SELECT DISTINCT in createQuery returning a list value在 createQuery 中使用 SELECT DISTINCT 返回列表值
【发布时间】:2013-11-19 19:56:04
【问题描述】:

我无法从此代码中添加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 中是否不可能像 SQL Query 那样使用 distinct 并返回值列表?

【问题讨论】:

  • 你能多写一点关于你的表结构吗??
  • 每当从表 TblTaxType 中找到 bfnsCode 时,我想区分列名 taxtCode。这里唯一的问题是我不能添加一个选择标签,只是从FROM开始然后它就可以完美地工作了。

标签: java hql dao


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    您也可以同时使用 Criteria 和 Projection :

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

    希望对某人有所帮助。

    【讨论】:

      【解决方案3】:

      当您使用 FROM TblTaxTypeSelect * 开始查询时,它会返回包含所有表列的表行,并使用 List &lt;TblTaxType&gt; 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

      【讨论】:

      • 那么我应该怎么做才能返回一个不同的字符串列表值呢?
      【解决方案4】:

      用hibernate做这个的正确方法是

      select tbl_tax_type  FROM TblTaxType tbl_tax_type WHERE BFNS_CODE = ?
      

      编辑 2

      获取不同列使用的特定列表:

      select distinct(taxtCode) from TblTaxType WHERE BFNS_CODE = ?
      

      在休眠中,您不必使用第一个 select 语句来获取列表,只需使用 from 语句,如下所示:

      from TblTaxType where BFNS_CODE = ?
      

      【讨论】:

      • 仍然是java.lang.String cannot be cast。我认为它没有返回字符串列表。
      • ERROR org.hibernate.hql.PARSER - line 1:40: unexpected token: tbl_tax_type
      • 编辑到select distinct(tbl_tax_type.taxtCode) FROM TblTaxType tbl_tax_type WHERE bfnsCode = ? 仍然java.lang.String 不能转换
      • 请尝试我的新编辑,我在我的应用程序中尝试了类似的查询,它运行良好,你让我怀疑自己。检查你的编码,但这是让它休眠的正确方法
      • 很抱歉,但它并没有真正起作用。我发布我的答案。使用该代码解决。请检查一下。
      猜你喜欢
      • 1970-01-01
      • 2012-10-07
      • 2018-07-01
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2014-03-13
      • 1970-01-01
      相关资源
      最近更新 更多