首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JPA如何按集合属性分组

JPA如何按集合属性分组
EN

Stack Overflow用户
提问于 2016-08-06 05:19:40
回答 1查看 1K关注 0票数 0

有没有办法按集合属性分组?例如,

代码语言:javascript
运行
复制
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组。

代码语言:javascript
运行
复制
select merchandise, attributes, sum(cost) from MerchandiseCost group by merchandise, attributes.

这会起作用吗?

编辑:如果不是,如何使用CriteriaQuery接口构建查询来获取结果,如下所示:

代码语言:javascript
运行
复制
Merchandise         Attributes         SUM(COST)
-----------------------------------------------------------
Cloth          size:L, color:RED       10000
Cloth          size:M, color:WHITE     20000
Computer       Memory:4G               80000
Computer       Memory:16G              90000
EN

回答 1

Stack Overflow用户

发布于 2016-08-06 20:15:43

不能按集合分组,也不能在select子句中选择多值字段。

Merchandise.class

代码语言:javascript
运行
复制
@Data
@Embeddable
@NoArgsConstructor
@EqualsAndHashCode
public class Merchandise {
    private String name;
}

Attribute.class

代码语言:javascript
运行
复制
@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

代码语言:javascript
运行
复制
@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

代码语言:javascript
运行
复制
@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();
    }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38797898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档