从表中忽略大小写获取不同的值

时间:2014-02-20 15:17:39

标签: java hibernate criteria

我是Hibernate的新手,我试图从表中获取不同的值,忽略值的大小写(大写或小写。在这种情况下更低)。我想要执行的SQL查询是:

select DISTINCT lower(column1) as column1 from Table

但我想通过Criteria取得成功。我正在使用预测。到目前为止我的代码是:

   Criteria criteria = getSession().createCriteria(className);
   ProjectionList pList = Projections.projectionList();
   ProjectionList pList2 = Projections.projectionList();
   pList2.add(Projections.distinct(pList.add(Projections.property("column1"), "column1")));
   criteria .addOrder(Order.asc("column1"));
   criteria .setProjection(pList2);
   criteria .setResultTransformer(Transformers.aliasToBean(className));
   List<Object> list = criteria .list();

   //Print out results
   System.out.println(list.size()); // returns 5 instead of 2

但结果不如预期。我得到了不同的实体,但没有忽略column1中值的情况。

Table
------
column1|column2|... 
------ |-------
aaa    | ...
aAa    |....
BBB    |....
bBB    |....
Bbb    |....

非常感谢任何帮助。

由于

2 个答案:

答案 0 :(得分:0)

您不会忽视大小写,因为您从未添加限制来忽略大小写。

您可以在订单中添加忽略大小写。

示例:

criteria.addOrder(Order.asc("column1").ignoreCase());

答案 1 :(得分:0)

感谢您的建议。我设法使用查询获得了所需的结果,因为它比你建议的要容易得多。我发布了我的答案,因为它可能会帮助将来的某个人

try{
    String MYQUERY = "select DISTINCT lower(column1) as col1 from TABLE order by col1 asc";

    List<(Object)> myList = null;
    SQLQuery query = getSession().createSQLQuery(MYQUERY);
    query.setResultTransformer(Transformers.aliasToBean(className));
    query.addScalar("col1", StandardBasicTypes.STRING);
    myList = query.list();
} catch (HibernateException e) {
    System.out.println(e);
}

再次感谢!