Можно ли в Сиене заказать по рассчитанному полю? - PullRequest
0 голосов
/ 27 мая 2011

Я пытаюсь получить запрос, упорядоченный по полю, который рассчитывается в Play. Это запрос, который я использую.

return all().order("points").fetch();

где точки определены как

public Integer points;

и извлекается благодаря этому получателю

public int getPoints(){
    List<EventVote> votesP = votes.filter("isPositive", true).fetch();
    List<EventVote> votesN = votes.filter("isPositive", false).fetch();
    this.points= votesP.size()-votesN.size();
    return this.points;
}

Правильно вызывается геттер, когда я делаю

int votes=objectWithPoints.points;

У меня такое ощущение, что я слишком притворяюсь из Сиены, но мне бы очень хотелось, чтобы это сработало (или какой-то похожий код). В настоящее время он просто пропускает условие заказа. Порядок на любом другом поле работает правильно.

1 Ответ

0 голосов
/ 27 мая 2011

Я думаю, что вы правдивы, когда говорите, что ждете слишком много :)
Сиенский запрос all().order("points").fetch() выполняет запрос к БД. Таким образом, он упорядочит значения, хранящиеся в БД, а не в вашей программе.

Из того, что вы говорите, я вижу, что у вас есть метод getPoints, который вычисляет значение. Тем не менее, если вы не сохраните это значение в базе данных, Сиена не сможет выполнить заказ.

Таким образом, вы либо вычисляете значение, устанавливаете его в своем объекте и сохраняете объект в БД.

objectWithPoints.points = getPoints();
objectWithPoints.save();

Либо вы сами упорядочиваете значения в своей программе после их вычисления.

...