我在我的应用程序(2.0.1)中使用Spring数据。该应用程序是基于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();
}
现在我有一个问题,它每天重复一次。当我要写入表格时,该表格未锁定以供读取。 我该如何实现?
我尝试锁定表-@Lock(LockModeType.PESSIMISTIC_WRITE) 或query.setLockMode(LockModeType.PESSIMISTIC_FORCE_INCREMENT); 但仍然无法正常工作。
非常感谢您的帮助
答案 0 :(得分:1)
LockModeType可以在不同的数据库中以不同的方式工作,尤其是在Oracle数据库中,这会有些棘手。这里jpa lockmode type npt working as expected
回答了类似的问题