我有一个实体:订单明细。它看起来如下:
@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();
问题是我无法访问product属性,执行“od.getProduct()。getName()”我得到nullpointerexception,所以,我该如何修复它?
答案 0 :(得分:0)
您并没有真正获得订单详细信息列表,而是获得每个订单明细组的总和列表。因此,您将从SQL获取数值。因此,我认为,您将获得空OrderDetail
(因为变换器)对象的列表,其上只设置了sum_amount
。
您的问题无法以当前形式解决,因为您的查询未获得订单详细信息但完全不同的对象。你应该重新思考你想要实现的目标和方式。
答案 1 :(得分:0)
当您使用Projections
对事物进行分组时,您将根据定义限制从查询中返回的内容。在上面的示例中,您只返回2列,因此未初始化@ManyToOne关联。获得结果集后,尝试循环它,对于每条记录,使用Hibernate.initialize
加载关联。