сортировать сразу, не через findBy

4 views
Skip to first unread message

dementiev

unread,
Nov 29, 2010, 8:53:47 AM11/29/10
to ruGrails
Всем привет!
Есть класс Place, у него
static hasMany = [ photos:Photo]

Мне надо отсортировать такую коллекцию: place.photos по дате и
желательно в этой же строке.
Пока сделал через компаратор, т.к. не нашёл, как прикрутить
параметры(сортировка в моём случае) к полю.

Kirill Suhanov

unread,
Nov 29, 2010, 8:59:34 AM11/29/10
to rugr...@googlegroups.com
place.photos.list(sort:"date", order:"asc")

По идее так должно работать, попробуйте.

29 ноября 2010 г. 16:53 пользователь dementiev <demen...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу ruGrails.

Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу rugr...@googlegroups.com.
Чтобы отменить подписку на эту группу, отправьте сообщение по адресу rugrails+u...@googlegroups.com.
О дополнительных функциях можно узнать в группе по адресу http://groups.google.com/group/rugrails?hl=ru.


Дмитрий Дементьев

unread,
Nov 29, 2010, 9:04:33 AM11/29/10
to rugr...@googlegroups.com
пробовал - ошибка:
No signature of method: org.hibernate.collection.PersistentSet.list()

29 ноября 2010 г. 15:59 пользователь Kirill Suhanov <suhanov...@gmail.com> написал:

Kirill Suhanov

unread,
Nov 29, 2010, 9:12:57 AM11/29/10
to rugr...@googlegroups.com
А, ну да, все верно. Применять можно только в domain классу.
Т.е. например Photo.list(sort:"date",order:"asc") можно сделать, тогда будет искать все instances этого класса.

Думаю нужное вам лежит здесь: http://www.grails.org/DomainClass+Dynamic+Methods
Либо через findAll пробуйте, либо criteria юзайте.

Например: def results = Photo.findAllByPlace(place, [sort:"date", order:"desc"])

29 ноября 2010 г. 17:04 пользователь Дмитрий Дементьев <demen...@gmail.com> написал:

Дмитрий Дементьев

unread,
Nov 29, 2010, 9:22:45 AM11/29/10
to rugr...@googlegroups.com
так тоже не пройдёт, т.к. связь many-to-many, т.е. у класса Photo 
static hasMany = [ photos:Photo]
Извиняюсь, что сразу это не сказал.

29 ноября 2010 г. 16:12 пользователь Kirill Suhanov <suhanov...@gmail.com> написал:
findAllByPlace

Дмитрий Дементьев

unread,
Nov 29, 2010, 9:23:13 AM11/29/10
to rugr...@googlegroups.com
static hasMany = [ places:Place]

29 ноября 2010 г. 16:22 пользователь Дмитрий Дементьев <demen...@gmail.com> написал:

Kirill Suhanov

unread,
Nov 29, 2010, 9:23:55 AM11/29/10
to rugr...@googlegroups.com
Ну тогда hibernate criteria, и нечего голову ломать.

29 ноября 2010 г. 17:22 пользователь Дмитрий Дементьев <demen...@gmail.com> написал:

achernyakevich

unread,
Nov 29, 2010, 5:12:22 PM11/29/10
to ruGrails
Привет.

Не стоит руками писать запросы, если доменная модель может все сделать
сама. :)

На сколько я понял, чтобы получить фотографии места отсортированными
по умолчанию нужно изменить класс Photo заимплементировав Comparable
типа вот так:

class Photo implements Comparable {
...
int compareTo(o) {
this.date.compareTo(o.date)
}
}

и потом изменив класc Place объявив коллекцию фотографий как
SortedSet:

class Place {
...
SortedSet photos

static hasMany = [photos: Photo]

...
}

Далее следующий код выдаст в на вывод фотографии отсортированные по
возрастанию даты:

Place p = Place.findByName("Some place")
p.photos.each {Photo photo ->
println "Photo: ${photo.description}"
}

Надеюсь это поможет. Кстати, данный подход наиболее правильный в
концепции DDD. Более детально можно посмотреть в документации - пункт
5.2.4.


С уважением,
Александр.

On Nov 29, 5:23 pm, Kirill Suhanov <suhanov.kir...@gmail.com> wrote:
> Ну тогда hibernate criteria, и нечего голову ломать.
>
> 29 ноября 2010 г. 17:22 пользователь Дмитрий Дементьев <

> dementie...@gmail.com> написал:


>
> > так тоже не пройдёт, т.к. связь many-to-many, т.е. у класса Photo
> > static hasMany = [ photos:Photo]
> > Извиняюсь, что сразу это не сказал.
>
> > 29 ноября 2010 г. 16:12 пользователь Kirill Suhanov <

> > suhanov.kir...@gmail.com> написал:


>
> >> findAllByPlace
>
> >  --
> > Вы получили это сообщение, поскольку подписаны на группу ruGrails.
> > Чтобы добавлять сообщения в эту группу, отправьте письмо по адресу
> > rugr...@googlegroups.com.
> > Чтобы отменить подписку на эту группу, отправьте сообщение по адресу

> > rugrails+u...@googlegroups.com<rugrails%2Bunsu...@googlegroups.com>

Reply all
Reply to author
Forward
0 new messages