2014-02-20 7 views
1

저는 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 |.... 

도움이 될 것입니다.

감사합니다.

+2

기준을 사용하는 대신 명명 된 쿼리를 작성해 보셨습니까? – jervine10

+1

@ jervine10에 동의합니다. 몇 시간을 기준 API를 사용하여 벽을 부딪 치거나 수작업으로 쿼리를 작성하고 완료 할 수 있습니다. –

+2

명명 된 쿼리는 쿼리가 어떤 모습으로 나타날지 알고있을 때 특히 유용합니다 . 이것은 동적 쿼리와 같이 보이지 않으므로 고정 된 수의 매개 변수가 있으므로 명명 된 쿼리는 훨씬 간단하고 유지 관리가 쉽습니다. – jervine10

답변

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); 
} 

다시 한번 감사드립니다!

0

대소 문자를 무시하는 제한을 추가하지 않았으므로 대소 문자를 무시하지 않습니다.

주문에 대문자 소문자를 추가 할 수 있습니다.

예 : 귀하의 제안에 대한

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

해답을 주셔서 감사합니다. 그러나 제가 찾고 있던 것이 아닙니다. 주문을 추가 할 때 이미 사례를 무시하고 시도했지만 예상대로 작동하지 않았습니다. 고마워요. – mario