У меня есть следующая последовательность в моем классе -
@Entity
public class CustomerOrder {
@Id
@SequenceGenerator( name = "CUSTOMER_ORDER_INVOICE_NO_SEQ_NAME", sequenceName = "CUSTOMER_ORDER_INVOICE_NO_SEQ", allocationSize = 20 )
@GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "CUSTOMER_ORDER_INVOICE_NO_SEQ_NAME" )
private int id;
private long orderInvoiceNo;
//.. getters and setters
}
Это класс репозитория данных весны, имеющий метод для получения next_val
@Repository
public interface CustomerOrderRepository
extends CrudRepository<CustomerOrder, Long>, JpaSpecificationExecutor<CustomerOrder> {
@Query( value = "SELECT next_val FROM CUSTOMER_ORDER_INVOICE_NO_SEQ", nativeQuery = true )
Long getNextOrderInvoiceNoSeq();
}
Мне нужно получить next_val изпоследовательность и передать это значение в двух разных местах.Поэтому я вызываю метод getNextOrderInvoiceNoSeq () моего репозитория и сохраняю значение как orderInvoiceNo -
@Autowired
private CustomerOrderRepository customerOrderRepository;
public void placeCustomerOrder( CustomerOrder customerOrder )
{
long orderInvoiceNo = customerOrderRepository.getNextOrderInvoiceNoSeq();
customerOrder.setOrderInvoiceNo(orderInvoiceNo);
// using the same orderInvoiceNo to my other pojo
// CustomerPurchase customerPurchase = new CustomerPurchase
// customerPurchase.setOrderInvoiceNo(orderInvoiceNo);
//....
customerOrderRepository.save(customerOrder);
}
@Entity
public class CustomerPurchase {
private String itemId;
private long orderInvoiceNo;
//.....
}
Итак, что происходит сейчас для первых двух итераций размещения customerOrder, я получаю orderInvoiceNo как 1 и 41,но после этого каждый раз я получаю 41 как next_val из последовательности, следовательно, делаю каждый заказ с тем же счетом no, который равен 41.