편집 : 둘 이상의 기준 쿼리를 활용에 대한 혐오감을 가지고 있기 때문에 - 어떤 이유를 - 나는 Order 클래스에 독서 건의 할 것입니다. 그것은 당신이 원하는 것을 당신에게 제공하지 않을 것입니다. 따라서 몇 가지 옵션이 있습니다.
하나의 옵션은 Hibernate Search을 활용하는 것입니다.
또 다른 방법은 쿼리에 대해 Hibernate를 활용 한 다음 Collections.sort(...)
을 주문하는 것입니다. 여러 쿼리를 사용하지 않음 2) 최대 절전 모드를 사용
List<MyObject> lstMyObject = ...;
Collections.sort(lstMyObject, new Comparator<MyObject>() {
@Override
public int compare(MyObject o1, MyObject o2) {
// Assuming 'argument' is passed to this method and defined as 'final'
return o1.getName().startsWith(argument) && o2.getName().startsWith(argument) ? 0 :
o1.getName().startsWith(argument) ? -1 : 1;
}
}
이 1 귀하의 요구 사항을 만족), 3) 4) 5) 노조 '를 사용하지 않는 뷰를 사용하지 네이티브 SQL을 사용하지 않습니다.
public List<MyObject> findMyObjects(...) {
Criteria queryStartsWith = sf.getCurrentSession().createCriteria(MyObject.class)
.add(Restrictions.like("myProperty",nameArgument,MatchMode.START))
.addOrder(Order.desc);
Criteria queryLike = sf.getCurrentSession().createCriteria(MyObject.class)
.add(Restrictions.like("myProperty",nameArgument,MatchMode.ANYWHERE))
.addOrder(Order.desc);
List<MyObject> lstMyObject = new ArrayList<MyObject>();
for (Object curObject : queryStartWith.list())
if (curObject instanceOf MyObject)
lstMyObject.add((MyObject) curObject);
for (Object curObject : queryLike.list())
if (curObject instanceOf MyObject)
lstMyObject.add((MyObject) curObject);
return lstMyObject;
}
내가 Hibernate는 조건부 주문을 수용 할 확실하지 않다 :
내 조언은 두 개의 쿼리, 뭔가 등이 될 것입니다. org.hibernate.criterion.Order 클래스는 정직하기에 꽤 제한되어 있습니다.
네이티브 SQL을 사용하는 것 외에는 내 머리 꼭대기에서 생각할 수있는 유일한 옵션입니다.
왜 당신은 최대 절전 모드가 필요합니까? 왜 JDBC와 SQL은 그것을 관리 할 수 없습니까? 당신이 Hibernate를 사용하고 있다고해서 그것이 모두 또는 아무 것도 제안되어서는 안된다는 것을 의미하지는 않는다. – duffymo
'indexOf ("certainString")' – acdcjunior
dyffymo로 주문을 시도하십시오. 저는 특정 환경에 대한 요구 사항으로 인해 제 한계를 말하고 있습니다. 최대 절전 모드로 두 개의 SQL 쿼리를 사용하거나 뷰를 사용하거나 최대 절전 모드로 원시 SQL로 이동할 수 있지만 내 상황에서는 이상적이지 않습니다. – user979051