From ec1b559e8e59f5818da26e52eb68a0be6bf8437e Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Thu, 17 Nov 2022 16:20:40 +0100
Subject: [PATCH] Modified the cascade

---
 Makefile                                      | 18 ++++----
 .../src/test/java/at/tuwien/BaseUnitTest.java |  2 -
 .../ContainerServiceIntegrationTest.java      | 44 +------------------
 .../service/ImageServiceIntegrationTest.java  |  1 +
 .../tuwien/entities/container/Container.java  |  4 +-
 .../container/image/ContainerImage.java       |  2 +-
 .../container/image/ContainerImageDate.java   |  2 +-
 .../at/tuwien/entities/database/View.java     |  2 +-
 .../tuwien/entities/database/table/Table.java |  4 +-
 .../database/table/columns/TableColumn.java   |  6 +--
 .../table/columns/concepts/Concept.java       |  2 +-
 .../entities/identifier/Identifier.java       |  4 +-
 .../main/java/at/tuwien/querystore/Query.java |  2 +-
 .../main/java/at/tuwien/querystore/Table.java |  2 +-
 14 files changed, 27 insertions(+), 68 deletions(-)

diff --git a/Makefile b/Makefile
index 1de82865aa..e3c832ef22 100644
--- a/Makefile
+++ b/Makefile
@@ -193,31 +193,31 @@ pull-metadata:
 
 test-backend: test-authentication-service test-container-service test-database-service test-discovery-service test-gateway-service test-query-service test-table-service test-identifier-service test-metadata-service
 
-test-authentication-service:
+test-authentication-service: build-backend-metadata-db
 	mvn -f ./fda-authentication-service/pom.xml clean test verify
 
-test-identifier-service:
+test-identifier-service: build-backend-metadata-db
 	mvn -f ./fda-identifier-service/pom.xml clean test verify
 
-test-container-service:
+test-container-service: build-backend-metadata-db
 	mvn -f ./fda-container-service/pom.xml clean test verify
 
-test-database-service:
+test-database-service: build-backend-metadata-db
 	mvn -f ./fda-database-service/pom.xml clean test verify
 
-test-discovery-service:
+test-discovery-service: build-backend-metadata-db
 	mvn -f ./fda-discovery-service/pom.xml clean test verify
 
-test-gateway-service:
+test-gateway-service: build-backend-metadata-db
 	mvn -f ./fda-gateway-service/pom.xml clean test verify
 
-test-query-service:
+test-query-service: build-backend-metadata-db
 	mvn -f ./fda-query-service/pom.xml clean test verify
 
-test-table-service:
+test-table-service: build-backend-metadata-db
 	mvn -f ./fda-table-service/pom.xml clean test verify
 
-test-metadata-service:
+test-metadata-service: build-backend-metadata-db
 	mvn -f ./fda-metadata-service/pom.xml clean test verify
 
 coverage-frontend: clean build-frontend
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
index 7f78acda8f..79202e1277 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/BaseUnitTest.java
@@ -142,7 +142,6 @@ public abstract class BaseUnitTest {
             .jdbcMethod(IMAGE_1_JDBC)
             .dialect(IMAGE_1_DIALECT)
             .driverClass(IMAGE_1_DRIVER)
-            .containers(List.of())
             .compiled(IMAGE_1_BUILT)
             .size(IMAGE_1_SIZE)
             .environment(IMAGE_1_ENV)
@@ -193,7 +192,6 @@ public abstract class BaseUnitTest {
             .jdbcMethod(IMAGE_2_JDBC)
             .dialect(IMAGE_2_DIALECT)
             .driverClass(IMAGE_2_DRIVER)
-            .containers(List.of())
             .compiled(IMAGE_2_BUILT)
             .size(IMAGE_2_SIZE)
             .environment(IMAGE_2_ENV)
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
index 80aa2f15c4..9bcaf7b91d 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ContainerServiceIntegrationTest.java
@@ -11,7 +11,6 @@ import at.tuwien.repository.jpa.ImageRepository;
 import at.tuwien.repository.jpa.UserRepository;
 import com.github.dockerjava.api.DockerClient;
 import com.github.dockerjava.api.exception.NotModifiedException;
-import com.github.dockerjava.api.model.HostConfig;
 import com.github.dockerjava.api.model.Network;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
@@ -46,7 +45,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     @MockBean
     private ContainerRepository containerRepository;
 
-    @MockBean
+    @Autowired
     private ImageRepository imageRepository;
 
     @Autowired
@@ -82,6 +81,7 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
 
         /* mock data */
         userRepository.save(USER_1);
+        imageRepository.save(IMAGE_1);
     }
 
     @AfterEach
@@ -127,8 +127,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
                 .thenReturn(Optional.empty());
         when(containerRepository.save(any(Container.class)))
                 .thenReturn(CONTAINER_1);
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
 
         /* test */
         final Container container = containerService.create(request, principal);
@@ -148,8 +146,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
         /* mock */
         when(containerRepository.findByInternalName(CONTAINER_1_INTERNALNAME))
                 .thenReturn(Optional.of(CONTAINER_1));
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
 
         /* test */
         assertThrows(ContainerAlreadyExistsException.class, () -> {
@@ -163,8 +159,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
         /* mock */
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.empty());
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
 
         /* test */
         assertThrows(ContainerNotFoundException.class, () -> {
@@ -182,8 +176,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
         final Principal principal = new BasicUserPrincipal(USER_1_USERNAME);
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
 
         /* test */
         assertThrows(ImageNotFoundException.class, () -> {
@@ -196,8 +188,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void findById_notFound_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
 
         /* test */
         assertThrows(ContainerNotFoundException.class, () -> {
@@ -209,8 +199,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_start_succeeds() throws DockerClientException, ContainerNotFoundException {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -223,8 +211,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_stop_succeeds() throws DockerClientException, InterruptedException, ContainerNotFoundException {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -238,8 +224,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_startSavedButNotFound_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
 
@@ -253,8 +237,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_removeSavedButNotFound_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
 
@@ -268,8 +250,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void getAll_succeeds() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findAll())
                 .thenReturn(List.of(CONTAINER_1, CONTAINER_2));
 
@@ -282,8 +262,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void remove_succeeds() throws DockerClientException, ContainerStillRunningException, ContainerNotFoundException {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -306,8 +284,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void remove_stillRunning_fails() throws InterruptedException {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -323,8 +299,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_alreadyRunning_fails() throws InterruptedException {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -340,8 +314,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_startNotFound_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.empty());
         dockerUtil.createContainer(CONTAINER_1);
@@ -356,8 +328,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_alreadyStopped_fails() throws InterruptedException {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -374,8 +344,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_stopNeverStarted_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -390,8 +358,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void change_stopSavedButNotFound_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
 
@@ -406,8 +372,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
             ContainerNotRunningException {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
@@ -425,8 +389,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void inspect_notFound_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
 
         /* test */
         assertThrows(ContainerNotFoundException.class, () -> {
@@ -438,8 +400,6 @@ public class ContainerServiceIntegrationTest extends BaseUnitTest {
     public void inspect_notRunning_fails() {
 
         /* mock */
-        when(imageRepository.findByRepositoryAndTag(IMAGE_1_REPOSITORY, IMAGE_1_TAG))
-                .thenReturn(Optional.of(IMAGE_1));
         when(containerRepository.findById(CONTAINER_1_ID))
                 .thenReturn(Optional.of(CONTAINER_1));
         dockerUtil.createContainer(CONTAINER_1);
diff --git a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java
index 6d11f4dbdc..a750619662 100644
--- a/fda-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java
+++ b/fda-container-service/rest-service/src/test/java/at/tuwien/service/ImageServiceIntegrationTest.java
@@ -44,6 +44,7 @@ public class ImageServiceIntegrationTest extends BaseUnitTest {
     @Transactional
     @BeforeEach
     public void beforeEach() {
+        imageRepository.save(IMAGE_1);
         log.debug("save container {}", CONTAINER_1);
         containerRepository.save(CONTAINER_1);
     }
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
index d483e9f593..c9227c53a9 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/Container.java
@@ -58,14 +58,14 @@ public class Container {
     private Integer port;
 
     @org.springframework.data.annotation.Transient
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumns({
             @JoinColumn(name = "id", referencedColumnName = "id", insertable = false, updatable = false)
     })
     private List<Database> databases;
 
     @org.springframework.data.annotation.Transient
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     private ContainerImage image;
 
     @Column
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
index 8704b32853..aa42dee40e 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImage.java
@@ -70,7 +70,7 @@ public class ContainerImage {
 
     @org.springframework.data.annotation.Transient
     @ToString.Exclude
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, mappedBy = "image")
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH, mappedBy = "image")
     private List<Container> containers;
 
     @Column(nullable = false, updatable = false)
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java
index 48a8d47a4b..35f755a714 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/container/image/ContainerImageDate.java
@@ -36,7 +36,7 @@ public class ContainerImageDate {
 
     @org.springframework.data.annotation.Transient
     @ToString.Exclude
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumn(name = "iid", insertable = false, updatable = false)
     private ContainerImage image;
 
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java
index 14466a12bd..056311dedf 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/View.java
@@ -46,7 +46,7 @@ public class View {
     private User creator;
 
     @org.springframework.data.annotation.Transient
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumn(name = "vdbid", insertable = false, updatable = false)
     private Database database;
 
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java
index c19555325c..3dd66a573c 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/Table.java
@@ -63,11 +63,11 @@ public class Table {
 
     @org.springframework.data.annotation.Transient
     @ToString.Exclude
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumn(name = "tdbid", insertable = false, updatable = false)
     private Database database;
 
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE, mappedBy = "table")
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH, mappedBy = "table")
     @OrderBy("ordinalPosition")
     private List<TableColumn> columns;
 
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
index 18412a2792..8ea2472b4b 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/TableColumn.java
@@ -52,13 +52,13 @@ public class TableColumn implements Comparable<TableColumn> {
     private Long dfid;
 
     @ToString.Exclude
-    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumn(name = "dfid", referencedColumnName = "id", insertable = false, updatable = false)
     private ContainerImageDate dateFormat;
 
     @org.springframework.data.annotation.Transient
     @ToString.Exclude
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumns({
             @JoinColumn(name = "tid", referencedColumnName = "id", insertable = false, updatable = false),
             @JoinColumn(name = "cdbid", referencedColumnName = "tdbid", insertable = false, updatable = false)
@@ -117,7 +117,7 @@ public class TableColumn implements Comparable<TableColumn> {
     @CreatedDate
     private Instant created;
 
-    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinTable(name = "mdb_columns_concepts",
             joinColumns = {
                     @JoinColumn(name = "cid", referencedColumnName = "id", insertable = false, updatable = false),
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java
index 733b2c6b14..01f0334edc 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/database/table/columns/concepts/Concept.java
@@ -29,7 +29,7 @@ public class Concept {
 
     @org.springframework.data.annotation.Transient
     @ToString.Exclude
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinTable(name = "mdb_columns_concepts",
             joinColumns = @JoinColumn(name = "uri"),
             inverseJoinColumns = {
diff --git a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
index 2fd3030060..14e2762a4d 100644
--- a/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
+++ b/fda-metadata-db/entities/src/main/java/at/tuwien/entities/identifier/Identifier.java
@@ -71,7 +71,7 @@ public class Identifier {
     @Enumerated(EnumType.STRING)
     private LanguageType language;
 
-    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumns({
             @JoinColumn(name = "License", referencedColumnName = "identifier")
     })
@@ -118,7 +118,7 @@ public class Identifier {
     @Enumerated(EnumType.STRING)
     private VisibilityType visibility = VisibilityType.SELF;
 
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     @JoinColumns({
             @JoinColumn(name = "iid", referencedColumnName = "id", insertable = false, updatable = false)
     })
diff --git a/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java b/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java
index 7e29b0f91e..3565d547b2 100644
--- a/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java
+++ b/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Query.java
@@ -79,7 +79,7 @@ public class Query implements Serializable {
     @javax.persistence.Column(nullable = false)
     private Long createdBy;
 
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     private List<at.tuwien.querystore.Table> tables;
 
     @javax.persistence.Column(name = "last_modified")
diff --git a/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Table.java b/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Table.java
index c4628e1185..88f672568f 100644
--- a/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Table.java
+++ b/fda-metadata-db/querystore/src/main/java/at/tuwien/querystore/Table.java
@@ -35,7 +35,7 @@ public class Table implements Serializable {
     @javax.persistence.Column(nullable = false)
     private Long dbid;
 
-    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.MERGE)
+    @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.DETACH)
     private List<at.tuwien.querystore.Column> columns;
 
     @javax.persistence.Column(nullable = false, updatable = false)
-- 
GitLab