ошибка при попытке изменить статус ордера в интерфейсе администратора (playframework) - PullRequest
0 голосов
/ 25 сентября 2011

В моем приложении у меня есть класс Order, который содержит коллекцию cartItem с. Заказ может иметь статус 'pending' ,'confirmed' и т. Д. После того, как клиент разместил заказ, он имеет статус «подтвержден».клиент предоставил неверную информацию об оплате, администратор решает изменить статус заказа на «ожидающий». Используя интерфейс CRUD/admin, я выбрал запись заказа и попытался изменить поле статуса. Это вызвало следующую ошибку.

        PersistenceException occured : org.hibernate.HibernateException:
 A collection with 
    cascade="all-delete-orphan" was no longer referenced
     by the owning entity instance: models.Order.cartItems

Ошибка, показанная на странице:

In {module:crud}/app/controllers/CRUD.java (around line 100)
96:  } catch (TemplateNotFoundException e) {
97:     render("CRUD/show.html", type, object);
98:  }
99:    }
100:  object._save();//Here error marked in red
101: flash.success(Messages.get("crud.saved", type.modelName));
102:  if (params.get("_save") != null) {
103:    redirect(request.controller + ".list");
104:   }
105:    redirect(request.controller + ".show", object._key());
106:     }

Модели в моем приложении:

@Entity
public class Order extends Model {
    @ManyToOne
    private Customer customer;

    @OneToMany( cascade=CascadeType.ALL,orphanRemoval=true)

    private Set<CartItem> cartItems;

    private String status;
    ...
}

@Entity
public class CartItem extends Model implements Comparable<CartItem>{

    @OneToOne
    private Product product;

    private int quantity;
...
}

Я не совсем понимаю, почему это произошло. Какможет ли изменение значения поля вызвать это?Что я должен сделать, чтобы избежать этой ошибки?Мне нужно, чтобы администратор мог редактировать это поле.

Если кто-то может предложить решение, было бы неплохо.

1 Ответ

0 голосов
/ 24 ноября 2011

Как насчет установки mappedBy в классе Order и добавления @ManyToOne к CartItem?

@Entity
public class Order extends Model {
    @ManyToOne
    private Customer customer;

    @OneToMany(mappedBy="order",cascade=CascadeType.ALL,orphanRemoval=true)
    private Set<CartItem> cartItems;

    private String status;
    ...
}

@Entity
public class CartItem extends Model implements Comparable<CartItem> {

    @OneToOne
    private Product product;

    @ManyToOne
    private Order order;

    private int quantity;
...
}
...