我是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 |....
非常感谢任何帮助。
由于
答案 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);
}
再次感谢!