2009-06-24 2 views
6

У меня есть класс сказать: «ClassA», который имеет коллекцию «ClassB»Hibernate @OrderBy с ссылочного класса

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinColumn(name = "COLUMN_NAME")  
private List<ClassB> lotsOfClasses; 

«ClassB» имеет отображенный класс «ClassC», используя простые старые аннотаций отображения:

public class ClassB { 
... 
    @ManyToOne 
    @JoinColumn(name="AD_POINT_ID") 
    private ClassC classC; 
... 
} 

Как добавить @OrderBy аннотацию к коллекции CLASSA к ClassB, так что коллекция заказана собственности «имя» ClassC

Как так:

@OrderBy(clause="classC.name asc") 

Все, что я получаю, это исключения Oracle, говорящие, что classC неизвестен.

Любая помощь здесь была бы потрясающей, так как ее действительно беспокоило меня в данный момент.

P.S. Следует также упомянуть, что используя аннотацию OrderBy в коллекции следующим образом: @OrderBy (clause = "classC asc") (т.е. без .name на classC) Я получаю действительный оператор SQL, в котором используется столбец ID (первичный ключ) класса C для заказа.

Приветствия, Все

+0

Как полагают Иржи Vypědřík вы можете реализовать интерфейс java.util.Comparator. В реализованном методе сравнения вы можете реализовать логику, чтобы ссылаться на объект Hibernate Mapped без проблем, и соответственно вернуть значение int. Тем не менее, это не будет использовать порядок в базе данных Oracle DB, но в памяти (JVM). – prageeth

ответ

7

К сожалению, невозможно сделать то, что вы хотите. Я ответил на аналогичный вопрос here.

@OrderBy поддерживает только Свойства элементов коллекции.

-1

Я знаю только NHibernate (.NET версии), но я предполагаю, что это должно работать аналогично:

@OrderBy(clause = "name asc") 

Или вы можете попробовать это:

@OrderBy("name") 
+0

Но это будет свойство «name» класса ClassB, мне нужно свойство name класса ClassC – Mark

1

Это возможно, если вы используете JPA. См. Это article.

Тогда вы просто добавить @OrderBy("name") к свойству коллекции

3

использование @Sort с пользовательским компаратором вместо