У меня есть две сущности:
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» и всех других методов.
Как дела?