Java 从表中获取不同的值忽略大小写
我不熟悉Hibernate,我试图从表中获取不同的值,忽略大小写(大写或小写,在本例中为小写)。我要执行的sql查询是: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
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);
}