java - Hibernate querying -
i'm sorry maybe foolish question. have products , orders tables (with many-to -many relationship), have user table. , want product count user_id , special field "order_satus". can make 2 queries order special criteria , size of product in order. not optimal @ all. when use jdbctemplate did lot of joins , 1 query.
here entities:
@entity @table(name = "shop.order") public class order { @id @column(name = "order_id") @generatedvalue(strategy = generationtype.auto) private long orderid; private long user_id; @column(name = "databegin") private date datebegin; @column(name = "dataend") private date dateend; @manytoone(fetch = fetchtype.lazy) @joincolumn(name = "user_id", insertable = false, updatable = false) private user user; @manytomany(fetch = fetchtype.lazy) @jointable(name = "order_product", joincolumns = { @joincolumn(name = "order_id") }, inversejoincolumns = { @joincolumn(name = "product_id") }) private list<product> products; }
product entity
@entity @table(name = "product") public class product { @id @generatedvalue(strategy = generationtype.auto) private int product_id; @manytomany(fetch = fetchtype.lazy) @jointable(name = "order_product", joincolumns = { @joincolumn(name = "product_id") }, inversejoincolumns = { @joincolumn(name = "order_id") }) private list<order> order; public list<order> getorder() { return order; } public void setorder(list<order> order) { this.order = order; } @column @notblank private string name; @column @max(value = 250) private string descr; @column @max(value = 250) private string manufacturer; @column private double price; @column private byte[] barcode; @column private byte[] picture; @foreignkey(name = "category_id") private int category_id;
as gave sql query..
'select count(*) produtc p join order ord on ord.id = ? , ord.status = ?' – igor masternoy
and according entity structure gave, hql be..
select ord.products productlist order ord ord.id=? , ord.status=?
this query return list of products (list<product> products
) , can count java code i.e. productlist.size();
size product count need based on order id , order status pass parameter , can append user.id
in cause filter result per user.
this productlist per need..
query query = getsession().createquery("select ord.products productlist order ord ord.id=:orderid , ord.status=:orderstatus"); query.setinteger("orderid", orderidparameter); query.setstring("orderstatus", orderstatusparameter); list<product> productlist = (list<product>) query.list(); integer productcount = productlist.size();
this productcount product count need.
Comments
Post a Comment