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