From 5a994237542565fbf0f7eba49dcaa50f9b68dcc7 Mon Sep 17 00:00:00 2001 From: juanf <juanf@ethz.ch> Date: Thu, 2 Feb 2023 17:02:06 +0100 Subject: [PATCH] SSDM-13195 : Trying to introduce Hibernate changes again --- .../openbis/generic/shared/dto/SamplePE.java | 53 +++++++++---------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java index 38c2d1a2822..5e8a2400139 100644 --- a/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java +++ b/openbis/source/java/ch/systemsx/cisd/openbis/generic/shared/dto/SamplePE.java @@ -22,7 +22,6 @@ import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.HashSet; -import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -44,6 +43,10 @@ import javax.persistence.Version; import javax.validation.constraints.NotNull; import javax.validation.constraints.Pattern; +import ch.systemsx.cisd.openbis.generic.server.CommonServiceProvider; +import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; +import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; +import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentityHolder; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; import org.apache.commons.lang3.builder.ToStringBuilder; @@ -62,9 +65,6 @@ import ch.rinn.restrictions.Private; import ch.systemsx.cisd.common.collection.UnmodifiableSetDecorator; import ch.systemsx.cisd.common.reflection.ModifiedShortPrefixToStringStyle; import ch.systemsx.cisd.openbis.generic.shared.IServer; -import ch.systemsx.cisd.openbis.generic.shared.basic.BasicConstant; -import ch.systemsx.cisd.openbis.generic.shared.basic.IIdHolder; -import ch.systemsx.cisd.openbis.generic.shared.basic.IIdentityHolder; import ch.systemsx.cisd.openbis.generic.shared.basic.dto.AttachmentHolderKind; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.IdentifierHelper; import ch.systemsx.cisd.openbis.generic.shared.dto.identifier.SampleIdentifier; @@ -129,32 +129,29 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co private String permId; - private Set<SampleRelationshipPE> parentRelationships = new LinkedHashSet<SampleRelationshipPE>(); + private Set<SampleRelationshipPE> parentRelationships; - private Set<SampleRelationshipPE> childRelationships = new LinkedHashSet<SampleRelationshipPE>(); + private Set<SampleRelationshipPE> childRelationships; private Set<MetaprojectAssignmentPE> metaprojectAssignments = new HashSet<MetaprojectAssignmentPE>(); - @OptimisticLock(excluded = true) - @OneToMany(fetch = FetchType.LAZY, mappedBy = "parentSample") - @Fetch(FetchMode.SUBSELECT) + @Transient private Set<SampleRelationshipPE> getSampleChildRelationships() { + if (childRelationships == null) { + if (id == null) { + childRelationships = new HashSet<>(); + } else { + childRelationships = new HashSet<>(CommonServiceProvider.getDAOFactory().getSampleRelationshipDAO().listSampleChildren(List.of(id))); + } + } return childRelationships; } - // Required by Hibernate. - @SuppressWarnings("unused") - private void setSampleChildRelationships(final Set<SampleRelationshipPE> childRelationships) - { - this.childRelationships = childRelationships; - } - @Transient public Set<SampleRelationshipPE> getChildRelationships() { - return new UnmodifiableSetDecorator<SampleRelationshipPE>(getSampleChildRelationships()); } @@ -171,23 +168,22 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co { relationship.setParentSample(this); getSampleChildRelationships().add(relationship); + CommonServiceProvider.getDAOFactory().getSampleRelationshipDAO().persist(List.of(relationship)); } - @OptimisticLock(excluded = true) - @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "childSample", orphanRemoval = true) - @Fetch(FetchMode.SUBSELECT) + @Transient private Set<SampleRelationshipPE> getSampleParentRelationships() { + if (parentRelationships == null) { + if (id == null) { + parentRelationships = new HashSet<>(); + } else { + parentRelationships = new HashSet<>(CommonServiceProvider.getDAOFactory().getSampleRelationshipDAO().listSampleParents(List.of(id))); + } + } return parentRelationships; } - // Required by Hibernate. - @SuppressWarnings("unused") - private void setSampleParentRelationships(final Set<SampleRelationshipPE> parentRelationships) - { - this.parentRelationships = parentRelationships; - } - @Transient public Set<SampleRelationshipPE> getParentRelationships() { @@ -205,6 +201,7 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co public void setParentRelationships(final Set<SampleRelationshipPE> parentRelationships) { + CommonServiceProvider.getDAOFactory().getSampleRelationshipDAO().delete(getSampleParentRelationships()); getSampleParentRelationships().clear(); for (final SampleRelationshipPE sampleRelationship : parentRelationships) { @@ -221,6 +218,7 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co { relationship.setChildSample(this); getSampleParentRelationships().add(relationship); + CommonServiceProvider.getDAOFactory().getSampleRelationshipDAO().persist(List.of(relationship)); } public void removeParentRelationship(final SampleRelationshipPE relationship) @@ -229,6 +227,7 @@ public class SamplePE extends AttachmentHolderPE implements IIdAndCodeHolder, Co relationship.getParentSample().getSampleChildRelationships().remove(relationship); relationship.setChildSample(null); relationship.setParentSample(null); + CommonServiceProvider.getDAOFactory().getSampleRelationshipDAO().delete(List.of(relationship)); } /** -- GitLab