package com.salesmanager.core.business.utils.query;
public class ProductQueryBuilder {
public static String buildProductQuery() {
StringBuilder qs = new StringBuilder();
//option 1
qs.append("select distinct p from Product as p ");
qs.append("join fetch p.availabilities pa ");
qs.append("join fetch p.descriptions pd ");
qs.append("join fetch p.merchantStore pm ");
qs.append("left join fetch pa.prices pap ");
qs.append("left join fetch pap.descriptions papd ");
//images
qs.append("left join fetch p.images images ");
//options
qs.append("left join fetch p.attributes pattr ");
qs.append("left join fetch pattr.productOption po ");
qs.append("left join fetch po.descriptions pod ");
qs.append("left join fetch pattr.productOptionValue pov ");
qs.append("left join fetch pov.descriptions povd ");
qs.append("left join fetch p.relationships pr ");//no relationships
//other lefts
qs.append("left join fetch p.manufacturer manuf ");
qs.append("left join fetch manuf.descriptions manufd ");
qs.append("left join fetch p.type type ");
qs.append("left join fetch p.taxClass tx ");
//option 2 no relationships
qs.append("select distinct p from Product as p ");
qs.append("join fetch p.merchantStore merch ");
qs.append("join fetch p.availabilities pa ");
qs.append("left join fetch pa.prices pap ");
qs.append("join fetch p.descriptions pd ");
qs.append("join fetch p.categories categs ");
qs.append("left join fetch pap.descriptions papd ");
//images
qs.append("left join fetch p.images images ");
//options (do not need attributes for listings)
qs.append("left join fetch p.attributes pattr ");
qs.append("left join fetch pattr.productOption po ");
qs.append("left join fetch po.descriptions pod ");
qs.append("left join fetch pattr.productOptionValue pov ");
qs.append("left join fetch pov.descriptions povd ");
//other lefts
qs.append("left join fetch p.manufacturer manuf ");
qs.append("left join fetch manuf.descriptions manufd ");
qs.append("left join fetch p.type type ");
qs.append("left join fetch p.taxClass tx ");
return qs.toString();
}
}