저는 Hibernate에 익숙하며 값의 대문자와 소문자를 구분하지 않고 테이블에서 고유 값을 얻으려고합니다.이 경우에는 lower입니다. 내가 실행하고자하는 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
그러나 예상대로 결과가 아닙니다. 다른 엔티티를 얻고 있지만 column1의 값의 대소 문자는 무시하지 않습니다.
Table
------
column1|column2|...
------ |-------
aaa | ...
aAa |....
BBB |....
bBB |....
Bbb |....
도움이 될 것입니다.
감사합니다.
기준을 사용하는 대신 명명 된 쿼리를 작성해 보셨습니까? – jervine10
@ jervine10에 동의합니다. 몇 시간을 기준 API를 사용하여 벽을 부딪 치거나 수작업으로 쿼리를 작성하고 완료 할 수 있습니다. –
명명 된 쿼리는 쿼리가 어떤 모습으로 나타날지 알고있을 때 특히 유용합니다 . 이것은 동적 쿼리와 같이 보이지 않으므로 고정 된 수의 매개 변수가 있으므로 명명 된 쿼리는 훨씬 간단하고 유지 관리가 쉽습니다. – jervine10