When using this sequence based custom ID generator in hibernate, how to get current saved ID value when doing a transaction?
Here is my custom IdGenerator
IdGenerator.java
public class IdGenerator extends SequenceStyleGenerator {
public static final String VALUE_PREFIX_PARAMETER = "valuePrefix";
public static final String VALUE_PREFIX_DEFAULT = "";
private String valuePrefix;
public static final String NUMBER_FORMAT_PARAMETER = "numberFormat";
public static final String NUMBER_FORMAT_DEFAULT = "%d";
private String numberFormat;
@Override
public Serializable generate(SharedSessionContractImplementor session,
Object object) throws HibernateException {
return valuePrefix + String.format(numberFormat, super.generate(session, object));
}
@Override
public void configure(Type type, Properties params,
ServiceRegistry serviceRegistry) throws MappingException {
super.configure(LongType.INSTANCE, params, serviceRegistry);
valuePrefix = ConfigurationHelper.getString(VALUE_PREFIX_PARAMETER,
params, VALUE_PREFIX_DEFAULT);
numberFormat = ConfigurationHelper.getString(NUMBER_FORMAT_PARAMETER,
params, NUMBER_FORMAT_DEFAULT);
}
}
Here is my Transaction
Supplier_Order_Detail.java
@Autowired
private SupplierOrderRepo supplierOrderRepo;
@Autowired
private SupplierOrderDetailRepo supplierOrderDetailRepo;
@Autowired
private ProductDetailRepo productDetailRepo;
@Autowired
private SupplierRepo supplierRepo;
@Override
@Transactional
public Map<String, Boolean> placeSupplierOrder(PlaceSupplierOrderDTO placeSupplierOrderDTO) {
Map<String, Boolean> map = new HashMap<>();
SupplierOrder supplierOrder = new SupplierOrder();
supplierOrder.setSupplier(supplierRepo.getOne(placeSupplierOrderDTO.getSupplierID()));
supplierOrder.setSupplierOrderID(placeSupplierOrderDTO.getSupplierOrderID());
Date currentDate = new Date();
supplierOrder.setAddTime(currentDate);
supplierOrder.setSupplierOrderDate(currentDate);
supplierOrderRepo.save(supplierOrder);
for (ProductOrderDTO productOrder : placeSupplierOrderDTO.getProductList()) {
SupplierOrderDetails supplierOrderDetails = new SupplierOrderDetails();
supplierOrderDetails.setProductDetails(productDetailRepo.getOne(productOrder.getBatchID()));
supplierOrderDetails.setSupplierOrder(supplierOrderRepo.getOne("SO000001"));
supplierOrderDetails.setOrderedQty(productOrder.getOrderedQty());
supplierOrderDetailRepo.save(supplierOrderDetails);
}
map.put("placesupplierordered", Boolean.TRUE);
return map;
}