首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标准和预测

标准和预测
EN

Stack Overflow用户
提问于 2011-07-20 03:21:51
回答 2查看 650关注 0票数 0

我有一个实体:订单详细信息。它看起来如下所示:

代码语言:javascript
运行
复制
@ManyToOne
public Product getProduct() {
    return this.product;
}
public void setProduct(Product product) {
    this.product = product;
}

@Column(name="amount",nullable = false)
public int getAmount() {
    return this.amount;
}
public void setAmount(int amount) {
    this.amount= amount;
}

@Transient
public void setSum_amount(double sum_amount){
    this.sum_amount=sum_amount;
}

我正在尝试获取订单详细信息的列表,按产品分组,以及订单详细信息表中每个产品的金额。

这是我的代码来做到这一点:

代码语言:javascript
运行
复制
    session=sessionFactory.openSession();
    List<OrderDetail> od=session.createCriteria(OrderDetail.class) 
    .setProjection( Projections.projectionList()
            .add( Projections.sum("amount"),"sum_amount")
            .add( Projections.groupProperty("product"))
    )
    .setResultTransformer(Transformers.aliasToBean(OrderDetail.class))
    .list();

问题是我不能访问产品属性,执行"od.getProduct().getName()“会得到nullpointerexception,那么,我该如何修复它呢?

EN

回答 2

Stack Overflow用户

发布于 2011-07-20 03:34:14

您真正得到的不是订单详细信息列表,而是每个订单详细信息组的金额列表。因此,您将从SQL中获取数值。因此,我认为,您得到的是只设置了sum_amount的空OrderDetail (由于transformer)对象的列表。

您的问题无法以当前形式解决,因为您的查询不是获取订单详细信息,而是获取完全不同的对象。你应该重新思考你正在努力实现的目标以及如何实现。

票数 0
EN

Stack Overflow用户

发布于 2011-07-21 10:33:14

当您使用Projections对事物进行分组时,您根据定义限制了从查询返回的内容。在上面的示例中,您只返回了2列,所以@ManyToOne关联没有被初始化。有了结果集后,尝试对其进行循环,对于每个记录,使用Hibernate.initialize加载关联。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6752862

复制
相关文章

相似问题

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