how to order a collection of a query hibernate criteria -
here model (simplified)
product
@entity @table(name = "products") public class product extends baseentity { @id private long id; private string name; @onetomany(cascade = { cascadetype.persist, cascadetype.merge }) @joincolumn(name = "product_id") private list<productattribute> attributes; }
product attribute
@entity @table(name = "product_attribute_values") public class productattribute extends baseentity { @id private long id; @manytoone(cascade = {cascadetype.persist, cascadetype.merge}) @joincolumn(name = "product_id") private product product; @manytoone(cascade = {cascadetype.persist, cascadetype.merge}) @joincolumn(name = "attribute_id") private attribute attribute; private string value; }
attribute
@entity @table(name = "attributes") @proxy(lazy = false) public class attribute extends baseentity { @id private long id; private string name; }
i want query single product (by id) , order list of attributes (productattributes) attribute name.
this query
final criteria criteria = getsession().createcriteria(product.class); criteria.add(restrictions.eq("id", productid)); criteria crit = criteria.createcriteria("attributes"); criteria secondcriteria = crit.createcriteria("attribute"); secondcriteria.addorder(order.desc("name")); return (product) criteria.uniqueresult();
i tried didnt work (dont recognize name field)
final criteria criteria = getsession().createcriteria(product.class); criteria.add(restrictions.eq("id", productid)); criteria.createalias("attributes", "atr"); criteria.addorder(order.asc("atr.attribute.name"));
any idea?
i did it. create 1 more alias , specify join type in both
final criteria criteria = getsession().createcriteria(product.class); criteria.add(restrictions.eq("id", searchfilter.getproductid())); criteria.createalias("attributes", "atrs", criteriaspecification.left_join); criteria.createalias("atrs.attribute", "atr", criteriaspecification.left_join); criteria.addorder(order.asc("atr.name"));
Comments
Post a Comment