У меня есть две сущности:Список элементов в продаже с использованием JPA
Items(id, user_id, title, price);
Purchases(id, item_id, user_id, date);
Использование JPA, я хотел бы перечислить все предметы, которые были куплены более чем Х раз, упорядоченные по их закупленных раз (первый будучи самым покупаемым).
мне удалось запрос правильный 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» и всех других методов.
Как вы поживаете?
Пожалуйста, покажите, что вы хотите в SQL. – Daniel
Почему бы вам избежать createQuery()? Запрос JPA - это путь сюда, либо через API критериев (если вы используете JPA2), либо прямым запросом JPA (именованный запрос). Действительно ли вы храните item_id в своей организации «Покупки»? Путь JPA должен состоять в том, чтобы иметь ссылку на элемент и позволить JPA обрабатывать идентификационные данные. – bert
Я добавил более подробную информацию :) –