Skip to content
This repository was archived by the owner on Aug 1, 2025. It is now read-only.

Commit d295cfa

Browse files
authored
Merge pull request #27 from Breeding-Insight/bug/BI-2078
BI-2078 - merge into release/0.9 branch
2 parents ed22fdd + 60d2cd2 commit d295cfa

File tree

4 files changed

+32
-24
lines changed

4 files changed

+32
-24
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<dependency>
3131
<groupId>org.postgresql</groupId>
3232
<artifactId>postgresql</artifactId>
33-
<version>42.4.3</version>
33+
<version>42.7.2</version>
3434
</dependency>
3535
<dependency>
3636
<groupId>jakarta.validation</groupId>

src/main/java/org/brapi/test/BrAPITestServer/model/entity/germ/PedigreeNodeEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public class PedigreeNodeEntity extends BrAPIPrimaryEntity {
2525
private GermplasmEntity germplasm;
2626
@Column
2727
private String pedigreeString;
28-
@OneToMany(mappedBy = "thisNode", cascade = CascadeType.ALL)
28+
@OneToMany(mappedBy = "thisNode", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
2929
private List<PedigreeEdgeEntity> edges = new ArrayList<>();
3030

3131
@Override

src/main/java/org/brapi/test/BrAPITestServer/service/germ/GermplasmService.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -326,12 +326,11 @@ public Germplasm updateGermplasm(String germplasmDbId, GermplasmNewRequest body)
326326
return convertFromEntity(savedEntity);
327327
}
328328

329-
// TODO: evaluate performance!
330329
public List<Germplasm> saveGermplasm(@Valid List<GermplasmNewRequest> body) throws BrAPIServerException {
331330
List<GermplasmEntity> toSave = new ArrayList<>();
332331
for (GermplasmNewRequest germplasm : body) {
333332
GermplasmEntity entity = new GermplasmEntity();
334-
updateEntity(entity, germplasm); // TODO: does updateEntity need to hit the database?
333+
updateEntity(entity, germplasm);
335334
toSave.add(entity);
336335
}
337336
// Save batch.
@@ -410,17 +409,13 @@ private void updateEntity(GermplasmEntity entity, GermplasmNewRequest request) t
410409
if (request.getBiologicalStatusOfAccessionCode() != null)
411410
entity.setBiologicalStatusOfAccessionCode(request.getBiologicalStatusOfAccessionCode());
412411
if (request.getBreedingMethodDbId() != null) {
413-
// TODO: the DbId is all we need to insert.
414-
BreedingMethodEntity method = new BreedingMethodEntity();
415-
method.setId(request.getBreedingMethodDbId());
416-
// breedingMethodService
417-
// .getBreedingMethodEntity(request.getBreedingMethodDbId());
412+
BreedingMethodEntity method = breedingMethodService
413+
.getBreedingMethodEntity(request.getBreedingMethodDbId());
418414
entity.setBreedingMethod(method);
419415
}
420416
if (request.getCollection() != null)
421417
entity.setCollection(request.getCollection());
422418
if (request.getCommonCropName() != null) {
423-
// TODO: can we drop or batch?
424419
CropEntity crop = cropService.findCropEntity(request.getCommonCropName());
425420
if (crop == null) {
426421
crop = cropService.saveCropEntity(request.getCommonCropName());

src/main/java/org/brapi/test/BrAPITestServer/service/germ/PedigreeService.java

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.Optional;
1212
import java.util.Set;
1313

14+
import io.swagger.model.IndexPagination;
1415
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerDbIdNotFoundException;
1516
import org.brapi.test.BrAPITestServer.exceptions.BrAPIServerException;
1617
import org.brapi.test.BrAPITestServer.model.entity.germ.CrossingProjectEntity;
@@ -484,15 +485,21 @@ private void updateEntityWithEdges(PedigreeNodeEntity entity, PedigreeNode node)
484485
UpdateUtility.updateEntity(node, entity);
485486
updateEntity(entity, node);
486487
if (node.getParents() != null) {
487-
488-
List<String> edgeIdsToDelete = new ArrayList<>();
488+
489+
SearchQueryBuilder<PedigreeEdgeEntity> search = new SearchQueryBuilder<PedigreeEdgeEntity>(PedigreeEdgeEntity.class);
490+
search.appendSingle(node.getGermplasmDbId(), "conncetedNode.germplasm.id");
491+
search.appendEnum(PedigreeEdgeEntity.EdgeType.child, "edgeType");
492+
Pageable defaultPageSize = PagingUtility.getPageRequest(new Metadata().pagination(new IndexPagination().pageSize(10000000)));
493+
Page<PedigreeEdgeEntity> existingParentEdges = pedigreeEdgeRepository.findAllBySearch(search, defaultPageSize);
494+
495+
List<String> edgeIdsToDelete = new ArrayList<>();
489496
edgeIdsToDelete.addAll(entity.getParentEdges().stream().map(e -> e.getId()).collect(Collectors.toList()));
490-
edgeIdsToDelete.addAll(entity.getParentNodes().stream().flatMap(parent -> parent.getProgenyEdges().stream())
491-
.filter(childEdge -> childEdge.getConncetedNode().equals(entity))
492-
.map(e -> e.getId()).collect(Collectors.toList()));
497+
edgeIdsToDelete.addAll(existingParentEdges.getContent().stream().map(e -> e.getId()).collect(Collectors.toList()));
493498

494-
pedigreeEdgeRepository.deleteAllByIdInBatch(edgeIdsToDelete);
495-
pedigreeEdgeRepository.flush();
499+
if (!edgeIdsToDelete.isEmpty()) {
500+
pedigreeEdgeRepository.deleteAllByIdInBatch(edgeIdsToDelete);
501+
pedigreeEdgeRepository.flush();
502+
}
496503

497504
for (PedigreeNodeParents parentNode : node.getParents()) {
498505
PedigreeNodeEntity parentEntity = findOrCreatePedigreeNode(parentNode.getGermplasmDbId());
@@ -501,15 +508,21 @@ private void updateEntityWithEdges(PedigreeNodeEntity entity, PedigreeNode node)
501508
}
502509
}
503510
if (node.getProgeny() != null) {
504-
505-
List<String> edgeIdsToDelete = new ArrayList<>();
511+
512+
SearchQueryBuilder<PedigreeEdgeEntity> search = new SearchQueryBuilder<PedigreeEdgeEntity>(PedigreeEdgeEntity.class);
513+
search.appendSingle(node.getGermplasmDbId(), "conncetedNode.germplasm.id");
514+
search.appendEnum(PedigreeEdgeEntity.EdgeType.parent, "edgeType");
515+
Pageable defaultPageSize = PagingUtility.getPageRequest(new Metadata().pagination(new IndexPagination().pageSize(10000000)));
516+
Page<PedigreeEdgeEntity> existingProgenyEdges = pedigreeEdgeRepository.findAllBySearch(search, defaultPageSize);
517+
518+
List<String> edgeIdsToDelete = new ArrayList<>();
506519
edgeIdsToDelete.addAll(entity.getProgenyEdges().stream().map(e -> e.getId()).collect(Collectors.toList()));
507-
edgeIdsToDelete.addAll(entity.getProgenyNodes().stream().flatMap(progeny -> progeny.getParentEdges().stream())
508-
.filter(parentEdge -> parentEdge.getConncetedNode().equals(entity))
509-
.map(e -> e.getId()).collect(Collectors.toList()));
520+
edgeIdsToDelete.addAll(existingProgenyEdges.getContent().stream().map(e -> e.getId()).collect(Collectors.toList()));
510521

511-
pedigreeEdgeRepository.deleteAllByIdInBatch(edgeIdsToDelete);
512-
pedigreeEdgeRepository.flush();
522+
if (!edgeIdsToDelete.isEmpty()) {
523+
pedigreeEdgeRepository.deleteAllByIdInBatch(edgeIdsToDelete);
524+
pedigreeEdgeRepository.flush();
525+
}
513526

514527
for (PedigreeNodeParents childNode : node.getProgeny()) {
515528
PedigreeNodeEntity childEntity = findOrCreatePedigreeNode(childNode.getGermplasmDbId());

0 commit comments

Comments
 (0)