2010-09-21 10 views
7

Jeśli mam („someProperty”) adnotacji @OrderBy na obiekcie, a następnie użyć Kryteria dodać ORDER BY tak:Czy można usunąć porządek z kryteriów hibernacji?

criteria.addOrder(Order.asc("id")); 

Powstały SQL zrobi kolejność tak:

ORDER BY someProperty, id asc 

Czy można zmienić kolejność dwóch lub usunąć zamówienie someProperty? Nie mogę usunąć adnotacji @OrderBy i używam Hibernate dla Java.

+0

Mam to samo pytanie ... używamy Hibernacji 3.2.6 ... chcielibyśmy mieć możliwość "przesłonięcia" adnotacji @OutumnBy podczas korzystania z projekcji. Czy ktoś o tym wie? Czy istnieje sposób, aby zmienić to w locie? Zmienić kolejność zamówień lub całkowicie usunąć klauzulę @OrderBy? Dzięki! –

+0

Mam ten sam problem z Hibernate 3.6.4, który zawęziłem do (bugged) implementacji org.hibernate.loader.JoinWalker # orderBy (ostatnie skojarzenia list, ostateczne zamówienie StringBy) na linii 820. I że istnieje błąd w tej linii, ponieważ OrderBy na skojarzeniach jest scalany przed zamówieniem określonym w Kryteriach. Pomyśl o tym: jeśli określiłem pożądane zamówienie w Kryteriach mających Elementy jako element główny, czy Hibernacja powinna najpierw umieszczać w zamówieniu wartość określoną w powiązanych stawkach? –

Odpowiedz

1

Criteria nie ma metody usuwania Order ani Criterion Order klasy jest bardzo ograniczony, można używać tylko nazwy właściwości i generuje standardowe i przenośny SQL. Adnotacja OrderBy to zlecenie SQL, ponieważ javadoc stwierdza: OrderBy Oznacza to, że możesz tam użyć dowolnego sql (nawet wyłącznego dostawcy bazy danych). Spójrz na ten artykuł: Sorting Collections in Hibernate Using SQL in @OrderBy

Dodanie fragmentu SQL do klasy Twojej domeny niekoniecznie jest najbardziej elegancką rzeczą na świecie, ale może być najbardziej pragmatyczną rzeczą.

1

Może być możliwe usunięcie konkretnego zamówienia za pomocą funkcji criteria.iterateOrderings(), ale nie jestem pewien, jak to działa z adnotacjami.

Powiązane problemy