I have an entity class in Hibernate JPA spring boot app using lombok. While analysing the code , I could not find any save()
code. Does the setter automatically generates the Hibernate queries and saves them to DB.
@SuperBuilder
@AllArgsConstructor
@NoArgsConstructor
@Getter
@Setter
@ToString(callSuper = true)
@Entity
@Table(name = "operation", schema = "ssp")
public class Operation extends CommonEntity{
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ToString.Exclude
@ManyToOne
@JoinColumn(name = "router_ref_id")
private Router router;
@ToString.Exclude
@OneToMany(mappedBy = "operation", cascade = CascadeType.ALL)
@OrderBy("sequence")
private List<OperationQr> qrList;
@ToString.Exclude
@OneToMany(mappedBy = "operation", cascade = CascadeType.ALL)
private Set<OperationDependency> operationDependencies;
@ToString.Exclude
@OneToMany(mappedBy = "operation", cascade = CascadeType.ALL)
@OrderBy("sequence")
private Set<OperationDocument> opnDocumentList;
@ToString.Exclude
@OneToOne
@JoinColumn(name = "operation_interface")
private OperationInterface operationInterface;
@Column(name = "router_operation_id")
private Integer routerOperationId;
@Column(name = "tenant_id")
private String tenantId;
@Column(name = "external_system_sequence")
private String externalSystemSequence;
The code which saves the Operation
and its parts are :
private Operation saveDetails(OperationDetailsViewModel newOperationData, String sso, Router router, Operation operation) {
copyProperties(newOperationData, operation);
StopWatch stopWatch = new StopWatch();
stopWatch.start();
Optional<XRefWorkcenterRequirementProfile> requirementProfile = workCenterService.getRequirementProfileFor( router, newOperationData.getWorkCenter().getId() );
operation.setRequrementProfile(requirementProfile.isPresent() ? requirementProfile.get().getProfileId() : null);
if (isOperationInterfaceChanged(operation.getOperationInterface(), newOperationData.getOperationInterface())) {
OperationInterface newOperationInterface = operationInterfaceService.getOperationInterface(
router.getEnterprise(), router.getBusinessUnit(), router.getPlant(), newOperationData.getOperationInterface().getId());
operation.setOperationInterface(newOperationInterface);
qualityResultService.removeOldQr(operation);
List<OperationQr> qrList = qualityResultService.createQrList(sso, operation, newOperationData.getGlobalQr());
qrList.addAll(qualityResultService.createQrList(sso, operation, newOperationData.getLocalQr()));
operation.setQrList(qrList);
Set<OperationDependency> operationDependencies = operationDependenciesService.createDependencies( sso, operation, newOperationData.getDependencies() );
operationDependencySetValidator.validateDependencySet( operationDependencies );
operationDependenciesService.removeOldDependencies( operation );
operation.setOperationDependencies( operationDependencies );
documentService.removeOldOperationDocuments(operation);
operation.setOpnDocumentList(documentService.createDocuments(sso, operation, newOperationData.getDocuments()));
purchaseDetailService.updatePurchaseDetail(sso, operation, newOperationData.getPurchaseDetails());
addCustomFields( sso, operation, newOperationData ) ;
OperationUtils.setEntityUpdateData( operation, sso );
stopWatch.stop();
LOGGER.info("..........SaveOperationDetails.......... Total time = " + stopWatch.getTotalTimeMillis() + " ms");
return operation;
}
saveDetails()
is wrapped in another method which is @Transactional
@Transactional
public Operation addOperation( OperationDetailsViewModel newOperationData, int indexToAdd, String sso, String changeRequestNumber ) {
Router router = getEditableRouter( newOperationData.getRouterId(), sso, changeRequestNumber );
Operation operation = prepareNewOperation(sso, router);
OperationUtils.addOperationToIndexWithResequencing( router.getOperationsList(), operation, indexToAdd );
return saveDetails(newOperationData, sso, router, operation);
}
private Operation mergeOperation(OperationDetailsViewModel operationDetailsViewModel, int i, String sso,
String changeRequestNumber, Router router, RouterLock routerLock) {
Operation operation;
if(operationDetailsViewModel.getId() == null) {
operation = saveOperationDetailsService
.addOperation(operationDetailsViewModel, i, sso, changeRequestNumber);
}
else {
operation = saveOperationDetailsService
.updateOperation(operationDetailsViewModel, sso, changeRequestNumber, router, routerLock);
}
return operation;
}
public static void addOperationToIndexWithResequencing(List<Operation> operations,
Operation newOperationWithoutSequence, int indexToAdd) {
operations.sort(Comparator.comparing(Operation::getSequence));
if (indexToAdd < operations.size()) {
operations.add(indexToAdd, newOperationWithoutSequence);
} else {
operations.add(newOperationWithoutSequence);
}
resequenceOperations(operations);
}