Перечислите позиции по продажам с использованием JPA - PullRequest
0 голосов
/ 20 января 2011

У меня есть две сущности:

Items(id, user_id, title, price);
Purchases(id, item_id, user_id, date);

Используя JPA, я хотел бы перечислить все предметы, которые были куплены более X раз, упорядоченные по их купленному времени (первый из которых был наиболее купленным).

Мне удалось получить правильный запрос SQL, но как я могу это сделать в JPA (возможно, без использования createQuery или чего-то подобного):

SELECT i.title, COUNT(p.id) as rank FROM items AS i LEFT OUTER JOIN purchases AS p ON p.item_id = i.id WHERE rank > X GROUP BY i.title ORDER BY rank DESC;
// of course, X is an int!

Спасибо за вашу помощь! :)

Обновление : Я указал, чтобы избежать createQuery, но я не объяснил, почему. Дело в том, что я создал класс, предназначенный для генерации запроса, он выглядит так:

public class Arguments {
    protected HashSet allowedOrders = new HashSet();
    protected Collection args = new ArrayList();

    // constructor and some other methods

    // this one works great
    public void setPriceMin(int price) {
        query += " AND price > ?";
        args.put(price);
    }

    // sames method for setPrice (= ?), and setPriceMax (= <)

    // this one doesn't :/
    public void setSalesMin(int sales) {
        // here's my problem
    }
}

Но (действительно) возможно, что мои методы не хороши. А поскольку вы затрагиваете критерии, возможно, мне стоит взглянуть на них, даже для «setPriceMin» и всех других методов.

Как дела?

1 Ответ

0 голосов
/ 20 января 2011

Вы не можете сделать это без запроса.

Либо переписать запрос как JPQL (очень похоже, но вам придется заменить идентификаторы объектами и делать соединения по свойствам, а не по таблицам), илииспользуйте JPA 2 CriteriaQuery API .(Или используйте ваш SQL как собственный запрос, но обычно это плохая идея)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...