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

Java 从表中获取不同的值忽略大小写,java,hibernate,criteria,Java,Hibernate,Criteria,我不熟悉Hibernate,我试图从表中获取不同的值,忽略大小写(大写或小写,在本例中为小写)。我要执行的sql查询是: select DISTINCT lower(column1) as column1 from Table 但我想用标准来实现这一目标。我用投影来做这个。到目前为止,我的代码是: Criteria criteria = getSession().createCriteria(className); ProjectionList pList = Projection

我不熟悉Hibernate,我试图从表中获取不同的值,忽略大小写(大写或小写,在本例中为小写)。我要执行的sql查询是:

select DISTINCT lower(column1) as column1 from Table
但我想用标准来实现这一目标。我用投影来做这个。到目前为止,我的代码是:

   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
任何帮助都将不胜感激


谢谢

您没有忽略案例,因为您从未添加忽略案例的限制

您可以在订单中添加忽略案例

例如:

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

谢谢你的建议。我使用查询成功地获得了所需的结果,因为它比您建议的简单得多。我正在发布我的答案,因为它可能会在将来帮助别人

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);
}
试试看{
String MYQUERY=“按col1 asc从表顺序中选择不同的下限(column1)作为col1”;
列表myList=null;
SQLQuery=getSession().createSQLQuery(MYQUERY);
query.setResultTransformer(Transformers.aliasToBean(className));
addScalar(“col1”,StandardBasicTypes.STRING);
myList=query.list();
}捕获(休眠异常e){
系统输出打印ln(e);
}

再次感谢

你想过写一个命名查询而不是使用条件吗?我同意@jervine10。您可以用CriteriaAPI花几个小时把头撞在墙上,或者直接手工编写查询并完成;)当您事先知道查询的外观时,命名查询特别有用。因为这看起来不像是一个动态查询,也就是说,它有固定数量的参数,所以命名查询将更简单,更易于维护。@jervine10伙计们,谢谢你们的评论。请按照你的建议看我下面的答案。谢谢你的回答,但这不是我想要的。我已经尝试在添加订单时忽略该案例,但它没有按预期工作。谢谢
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);
}