Я пытаюсь изучить веб-разработку javaee. Я начал с того, что следовал [Учебное пособие по электронной коммерции NetBeans - интеграция транзакционной бизнес-логики] [1]. У меня возникла проблема, когда я нажимал кнопку Отправить заказ для ввода данных в базу данных., orderID никогда не обновляется, и поэтому я терплю неудачу.
Я использовал em.flush (), как объяснено:
Чтобы понять, почему метод order.getId возвращает ноль, рассмотрим, чтоКод на самом деле пытается достичь.Метод getId пытается получить идентификатор заказа, который в данный момент находится в процессе создания.Поскольку идентификатор является первичным ключом с автоинкрементом, база данных автоматически генерирует значение только при добавлении записи.Одним из способов преодоления этого является ручная синхронизация контекста персистентности с базой данных.Это может быть выполнено с помощью метода сброса EntityManager.
, но все равно я получаю значение ордера как 0.
private void addOrderedItems(CustomerOrder order, ShoppingCart cart) {
em.flush();
List<ShoppingCartItem> items = cart.getItems();
// iterate through shopping cart and create OrderedProducts
for (ShoppingCartItem scItem : items) {
int productId = scItem.getProduct().getId();
// set up primary key object
OrderedProductPK orderedProductPK = new OrderedProductPK();
orderedProductPK.setCustomerOrderId(order.getId());
orderedProductPK.setProductId(productId);
// create ordered item using PK object
OrderedProduct orderedItem = new OrderedProduct(orderedProductPK);
// set quantity
orderedItem.setQuantity(scItem.getQuantity());
em.persist(orderedItem);
}
}
Проблема была исправлена.Я не дал значение для даты, которая не должна быть нулевой.Вот почему я не мог написать в базу данных.