Критерии и прогнозы - PullRequest
       19

Критерии и прогнозы

0 голосов
/ 19 июля 2011

У меня есть лицо: Детали заказа. Это выглядит следующим образом:

@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, так как я могу это исправить?

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Когда вы используете Projections для группировки вещей, вы по определению ограничиваете то, что возвращается из вашего запроса.В приведенном выше примере вы возвращаете только 2 столбца, поэтому связь @ManyToOne не инициализируется.Когда у вас есть набор результатов, попробуйте зациклить его, и для каждой записи используйте Hibernate.initialize, чтобы загрузить ассоциацию.

0 голосов
/ 19 июля 2011

Вы на самом деле не получаете список деталей заказа, а список сумм для каждой группы деталей заказа. Итак, вы получаете числовые значения из SQL. Поэтому, я думаю, вы получаете список пустых OrderDetail (из-за преобразователя) объектов с установленным на них только sum_amount.

Ваша проблема не может быть решена в ее текущем виде, так как ваш запрос не получает детали заказа, а содержит совершенно другие объекты. Вы должны переосмыслить то, что вы пытаетесь достичь и как.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...