Я использую данные Spring в своем приложении (2.0.1).Приложение представляет собой службу на основе REST, которая добавляет заказы.
Сущность заказа выглядит следующим образом:
@Entity
@Table(name = "orders")
@Data
@NoArgsConstructor
public class OrderEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Version
private int version;
private Date date;
private String post;
private BigDecimal totalAmount;
@Enumerated(EnumType.STRING)
private OrderStatus status;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "order_id")
List<OrderSetEntity> sets;
private int dailyNumber;
private String documentNumber;
Проводка или заказы происходят в OrderService:
public Long postOrder(OrderDTO orderDTO){
Date date = new Date();
OrderEntity order = new OrderEntity(date, orderDTO.getPost(), orderDTO.getPaymentMethod());
Integer dailyNumber = orderRepository.findDailyNumberByDate(date) + 1;
order.setDailyNumber(dailyNumber);
orderRepository.save(order);
return order.getId();
}
в то время как findDailyNumberByDate реализован следующим образом:
@Override
public int findDailyNumberByDate(Date date) {
String sql = String.format("select max(o.dailyNumber) from OrderEntity o ");
Query query = entityManager.createQuery(sql);
Integer result = (Integer) query.getSingleResult();
if (result == null){
return 0;
}else {
return result.intValue();
}
Теперь у меня проблема, что он дублируется dailyNumber.Таблица не заблокирована для чтения, когда я собираюсь написать в нее.Как мне этого добиться?
Я пытался заблокировать таблицу - @Lock (LockModeType.PESSIMISTIC_WRITE) или query.setLockMode (LockModeType.PESSIMISTIC_FORCE_INCREMENT);но все еще не работает.
Большое спасибо за помощь