В моем приложении у меня есть класс 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;
...
}
Я не совсем понимаю, почему это произошло. Какможет ли изменение значения поля вызвать это?Что я должен сделать, чтобы избежать этой ошибки?Мне нужно, чтобы администратор мог редактировать это поле.
Если кто-то может предложить решение, было бы неплохо.