有没有办法按集合属性分组?例如,
public class Merchandise {
id,
name
}
public class Attribute {
id,
name,
value,
@ManyToOne
MerchandiseCost merchandiseCost;
}
public class MerchandiseCost {
Merchandise merchandise,
List<Attribute> attributes,
BigDecimal cost,
}
按商品和属性搜索MerchandiseCost组。
select merchandise, attributes, sum(cost) from MerchandiseCost group by merchandise, attributes.
这会起作用吗?
编辑:如果不是,如何使用CriteriaQuery接口构建查询来获取结果,如下所示:
Merchandise Attributes SUM(COST)
-----------------------------------------------------------
Cloth size:L, color:RED 10000
Cloth size:M, color:WHITE 20000
Computer Memory:4G 80000
Computer Memory:16G 90000
发布于 2016-08-06 20:15:43
不能按集合分组,也不能在select子句中选择多值字段。
Merchandise.class
@Data
@Embeddable
@NoArgsConstructor
@EqualsAndHashCode
public class Merchandise {
private String name;
}
Attribute.class
@Data
@Embeddable
@EqualsAndHashCode
public class Attribute {
private int id;
private String name;
private String value;
private MerchandiseCost merchandiseCost;
@ManyToOne
public MerchandiseCost getMerchandiseCost() {
return merchandiseCost;
}
}
MerchandiseCost.class
@Data
@Entity
@EqualsAndHashCode
public class MerchandiseCost extends ABaseEntity {
private Merchandise merchandise;
private List<Attribute> attributes;
private BigDecimal cost;
@Embedded
public Merchandise getMerchandise() {
return merchandise;
}
public void setMerchandise(Merchandise merchandise) {
this.merchandise = merchandise;
}
@ElementCollection
@CollectionTable(name = "MERCHANDISE_ATTRIBUTE", joinColumns = @JoinColumn(name = "MERCHANDISE_ID"))
public List<Attribute> getAttributes() {
return attributes;
}
}
MerchandiseResult.class
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode
public class MerchandiseResult {
private Merchandise merchandise;
private Attribute attribute;
private BigDecimal cost;
}
MerchandiseDao.class
@Stateless
public class MerchandiseDao {
@PersistenceContext(name = "tngo")
private EntityManager entityManager;
public void readCost(){
Query query = entityManager.createQuery("select NEW tngo.cert.training.model.MerchandiseResult(mc.merchandise, att, sum(mc.cost)) from MerchandiseCost mc join mc.attributes att group by mc.merchandise, att");
query.getResultList();
}
}
https://stackoverflow.com/questions/38797898
复制相似问题