Строка была обновлена ​​или удалена другой транзакцией (или картирование неспасенной стоимости было неверным):JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Строка была обновлена ​​или удалена другой транзакцией (или картирование неспасенной стоимости было неверным):

Сообщение Anonymous »

Я работаю над приложением Spring Boot, в котором создаю заказ с помощью метода createOrder. Каждый раз я сталкиваюсь со следующей ошибкой:
OrderService

Код: Выделить всё

public class OrderService {

OrderRepository orderRepository;
ItemRepository itemRepository;
UserRepository userRepository;

private OrderView mapToOrderView(Order order) {
return OrderView.builder().orderId(order.getOrderId())
.userId(order.getUserId())
.createdTime(order.getCreatedTime())
.updatedTime(order.getUpdatedTime())
.completedTime(order.getCompletedTime())
.orderItems(order.getOrderItems())
.deliveryMethod(order.getDeliveryMethod())
.orderStatus(order.getOrderStatus())
.additionalInstructions(order.getAdditionalInstructions())
.rating(order.getRating())
.feedback(order.getFeedback())
.build();
}

@Transactional
public OrderView createOrder(PostOrderRequest request) {

Order order = Order.builder()
.orderId(UUID.randomUUID())
.userId(request.getUserId())
.createdTime(LocalDateTime.now())
.deliveryMethod(request.getDeliveryMethod())
.orderStatus(OrderStatus.PLACED)
.build();

List orderItems = mapOrderItems(request.getOrderItems(), order.getOrderId());
order.setOrderItems(orderItems);

order.setUpdatedTime(LocalDateTime.now());
orderRepository.save(order);
return mapToOrderView(order);
}

private List mapOrderItems(List itemRequests, UUID orderId) {
if (itemRequests == null || itemRequests.isEmpty()) {
throw new IllegalArgumentException("Order must contain at least one item.");
}

List orderItems = new ArrayList();
for (OrderItem itemRequest : itemRequests) {
Optional item = itemRepository.findById(itemRequest.getItemId());
if (item.isEmpty()) {
throw new IllegalArgumentException("Item not available: " + itemRequest.getItemId());
}

orderItems.add(OrderItem.builder()
.orderItemId(UUID.randomUUID())
.itemId(item.get().getItemId())
.quantity(itemRequest.getQuantity())
.build());

}

return orderItems;
}
Order.class

Код: Выделить всё

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "orders")
public class Order {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private UUID orderId;
private UUID userId;
@Column(updatable = false, insertable = false)
private LocalDateTime createdTime;
private LocalDateTime updatedTime;
private LocalDateTime completedTime;

@OneToMany(mappedBy = "order", cascade = CascadeType.ALL, orphanRemoval = true)
private List  orderItems;

private DeliveryMethod deliveryMethod;
private OrderStatus orderStatus;

@OneToOne
@JoinColumn(name = "payment_id")
private Payment payment;
private String additionalInstructions;
private int rating;
private String feedback;

@Version
private int version;

}

< /code>
Журнал ошибок < /p>
"org.springframework.orm.ObjectOptimisticLockingFailureException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect): [order.mgt.core.model.Order#be58d23c-010b-4f3c-9917-f9aa0df95c4f]The resource you are trying to update has been modified by another transaction.
Журналы гибернации

Код: Выделить всё

    Hibernate:
select
u1_0.user_id,
u1_0.country,
u1_0.county,
u1_0.number,
u1_0.post_code,
u1_0.street_address,
u1_0.street_address2,
u1_0.town,
u1_0.email,
u1_0.phone_number,
u1_0.created_date,
u1_0.name
from
user u1_0
where
u1_0.user_id=?
Hibernate:
select
i1_0.item_id,
i1_0.category,
i1_0.description,
i1_0.image,
i1_0.is_available,
i1_0.name,
i1_0.tag
from
item i1_0
where
i1_0.item_id=?
Hibernate:
select
o1_0.order_id,
o1_0.additional_instructions,
o1_0.completed_time,
o1_0.created_time,
o1_0.delivery_method,
o1_0.feedback,
o1_0.order_status,
p1_0.paymentid,
p1_0.amount,
p1_0.currency,
p1_0.order_id,
p1_0.status,
p1_0.type,
o1_0.rating,
o1_0.updated_time,
o1_0.user_id,
o1_0.version,
oi1_0.order_id,
oi1_0.order_item_id,
c1_0.customization_id,
c1_0.customization_option,
c1_0.price_change,
i1_0.item_id,
i1_0.category,
i1_0.description,
i1_0.image,
i1_0.is_available,
i1_0.name,
i1_0.tag,
oi1_0.item_id,
oi1_0.portion_size,
oi1_0.quantity
from
orders o1_0
left join
payment p1_0
on p1_0.paymentid=o1_0.payment_id
left join
order_item oi1_0
on o1_0.order_id=oi1_0.order_id
left join
customization c1_0
on c1_0.customization_id=oi1_0.customization_id
left join
item i1_0
on i1_0.item_id=oi1_0.item_id2
where
o1_0.order_id=?
Hibernate:
select
o1_0.order_id,
o1_0.additional_instructions,
o1_0.completed_time,
o1_0.created_time,
o1_0.delivery_method,
o1_0.feedback,
o1_0.order_status,
p1_0.paymentid,
p1_0.amount,
p1_0.currency,
p1_0.order_id,
p1_0.status,
p1_0.type,
o1_0.rating,
o1_0.updated_time,
o1_0.user_id,
o1_0.version
from
orders o1_0
left join
payment p1_0
on p1_0.paymentid=o1_0.payment_id
where
o1_0.order_id=?
Есть ли помощь или предложения по решению этой проблемы? Я работаю над приложением Spring Boot, которое обрабатывает создание заказов и включает в себя несколько операций с базой данных, таких как получение сведений о пользователе и элементе, а также сохранение заказов и связанных объектов. У меня есть оптимистическая блокировка с использованием поля @Version в моих объектах для обработки одновременных обновлений. Метод службы, отвечающий за создание заказа, помечен аннотацией @Transactional, чтобы гарантировать, что все операции с базой данных выполняются в рамках одной транзакции.

Подробнее здесь: https://stackoverflow.com/questions/793 ... apping-was
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»