我有一个实体:订单详细信息。它看起来如下所示:
@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;
}我正在尝试获取订单详细信息的列表,按产品分组,以及订单详细信息表中每个产品的金额。
这是我的代码来做到这一点:
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,那么,我该如何修复它呢?
发布于 2011-07-20 03:34:14
您真正得到的不是订单详细信息列表,而是每个订单详细信息组的金额列表。因此,您将从SQL中获取数值。因此,我认为,您得到的是只设置了sum_amount的空OrderDetail (由于transformer)对象的列表。
您的问题无法以当前形式解决,因为您的查询不是获取订单详细信息,而是获取完全不同的对象。你应该重新思考你正在努力实现的目标以及如何实现。
发布于 2011-07-21 10:33:14
当您使用Projections对事物进行分组时,您根据定义限制了从查询返回的内容。在上面的示例中,您只返回了2列,所以@ManyToOne关联没有被初始化。有了结果集后,尝试对其进行循环,对于每个记录,使用Hibernate.initialize加载关联。
https://stackoverflow.com/questions/6752862
复制相似问题