开发者

List items per sales using JPA

I have two entities :

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

Using JPA, I'd like to list all the items that have been purchased more than X times, ordered by their purchased times (the first being the most purchased).

I managed to have the correct SQL request, but how can I do that in JPA (possibly without using createQuery or something equivalent) :

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!

Thank you for your help! :)

Update: I indicated to avoid createQuery but I didn't explained why. The thing is, I made a class dedicated to generating the query, it looks like :

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 :/
    p开发者_如何学运维ublic void setSalesMin(int sales) {
        // here's my problem
    }
}

But It's (really) possible that my methods isn't good. And since you bring up the Criteria, maybe I should take a look at it, even for "setPriceMin" and all the other methods.

How'd you do?


You can't do it without a Query.

Either rewrite the Query as JPQL (very similar, but you will have to replace ids with objects and do joins on properties, not on tables), or use the JPA 2 CriteriaQuery API. (Or use your SQL as a native Query, but this is usually a bad idea)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜