From b03577cadc956745418db03abadcd8fbe694c390 Mon Sep 17 00:00:00 2001
From: Martin Weise <martin.weise@tuwien.ac.at>
Date: Tue, 6 Jun 2023 19:39:16 +0200
Subject: [PATCH] WIP

---
 dbrepo-container-service/pom.xml              |  5 ---
 .../DbrepoContainerManagingApplication.java   |  2 +
 .../src/main/resources/application-local.yml  |  8 ++--
 .../src/main/resources/application.yml        | 12 +++---
 .../at/tuwien/config/OpenSearchConfig.java    | 35 +++++++++++++++++
 dbrepo-database-service/pom.xml               | 15 ++++++-
 .../DbrepoDatabaseManagingApplication.java    |  1 +
 .../src/main/resources/application.yml        |  2 +
 dbrepo-identifier-service/pom.xml             | 12 ++++--
 .../DbrepoIdentifierServiceApplication.java   |  1 +
 .../src/main/resources/application.yml        |  2 +
 .../at/tuwien/api/database/DatabaseDto.java   |  5 ++-
 .../java/at/tuwien/api/database/ViewDto.java  |  5 ++-
 .../tuwien/api/database/table/TableDto.java   | 12 +++---
 .../api/database/table/TableKeyDto.java       | 24 ++++++++++++
 .../api/database/table/columns/ColumnDto.java | 14 ++++---
 .../database/table/columns/ColumnKeyDto.java  | 27 +++++++++++++
 .../tuwien/api/identifier/IdentifierDto.java  |  5 ++-
 .../main/java/at/tuwien/api/user/UserDto.java |  2 +
 dbrepo-metadata-db/pom.xml                    | 11 ++----
 dbrepo-metadata-service/pom.xml               | 12 ++++++
 .../DbrepoMetadataServiceApplication.java     |  1 +
 .../src/main/resources/application.yml        |  2 +
 .../at/tuwien/config/OpenSearchConfig.java    | 35 +++++++++++++++++
 dbrepo-query-service/pom.xml                  |  6 +--
 .../tuwien/DbrepoQueryServiceApplication.java |  1 +
 .../src/main/resources/application.yml        |  2 +
 dbrepo-semantics-service/pom.xml              |  6 +--
 .../DbrepoSemanticsServiceApplication.java    |  1 +
 .../src/main/resources/application.yml        |  2 +
 dbrepo-table-service/pom.xml                  | 23 ++++++++---
 .../tuwien/DbrepoTableServiceApplication.java |  7 ++--
 .../src/main/resources/application-local.yml  |  2 +-
 .../src/main/resources/application.yml        |  2 +-
 .../endpoint/TableColumnEndpointUnitTest.java |  4 +-
 .../TableEndpointIntegrationTest.java         |  6 +--
 .../endpoint/TableEndpointUnitTest.java       |  4 +-
 .../gateway/QueryServiceGatewayUnitTest.java  |  4 +-
 .../at/tuwien/mapper/TableMapperUnitTest.java |  7 +---
 .../MessageQueueServiceIntegrationTest.java   |  7 ++--
 .../TableServiceIntegrationReadTest.java      |  8 ++--
 .../TableServiceIntegrationWriteTest.java     |  8 ++--
 .../java/at/tuwien/config/IndexConfig.java    | 39 +++----------------
 .../at/tuwien/config/OpenSearchConfig.java    |  7 ++--
 .../java/at/tuwien/mapper/TableMapper.java    |  5 +--
 .../{jpa => mdb}/ConceptRepository.java       |  2 +-
 .../{jpa => mdb}/ContainerRepository.java     |  2 +-
 .../DatabaseAccessRepository.java             |  5 ++-
 .../{jpa => mdb}/DatabaseRepository.java      |  2 +-
 .../ImageEnvironmentRepository.java           |  6 +--
 .../{jpa => mdb}/ImageRepository.java         |  2 +-
 .../{jpa => mdb}/OntologyRepository.java      |  2 +-
 .../{jpa => mdb}/RealmRepository.java         |  2 +-
 .../{jpa => mdb}/TableColumnRepository.java   |  5 ++-
 .../{jpa => mdb}/TableRepository.java         |  5 ++-
 .../{jpa => mdb}/UnitRepository.java          |  2 +-
 .../{jpa => mdb}/UserRepository.java          |  2 +-
 .../TableColumnIdxRepository.java             |  5 ++-
 .../{elastic => sdb}/TableIdxRepository.java  |  5 ++-
 .../service/impl/AccessServiceImpl.java       |  2 +-
 .../service/impl/ContainerServiceImpl.java    |  2 +-
 .../service/impl/DatabaseServiceImpl.java     |  3 +-
 .../tuwien/service/impl/RabbitMqService.java  |  2 +-
 .../service/impl/SemanticServiceImpl.java     |  6 +--
 .../tuwien/service/impl/TableServiceImpl.java | 10 ++---
 .../tuwien/service/impl/UserServiceImpl.java  |  2 +-
 dbrepo-user-service/pom.xml                   |  6 +--
 .../at/tuwien/FdaUserServiceApplication.java  |  1 +
 .../src/main/resources/application.yml        |  2 +
 69 files changed, 319 insertions(+), 165 deletions(-)
 create mode 100644 dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
 create mode 100644 dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java
 create mode 100644 dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnKeyDto.java
 create mode 100644 dbrepo-metadata-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/ConceptRepository.java (91%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/ContainerRepository.java (88%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/DatabaseAccessRepository.java (80%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/DatabaseRepository.java (97%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/ImageEnvironmentRepository.java (59%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/ImageRepository.java (88%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/OntologyRepository.java (88%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/RealmRepository.java (88%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/TableColumnRepository.java (66%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/TableRepository.java (80%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/UnitRepository.java (91%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{jpa => mdb}/UserRepository.java (90%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{elastic => sdb}/TableColumnIdxRepository.java (67%)
 rename dbrepo-table-service/services/src/main/java/at/tuwien/repository/{elastic => sdb}/TableIdxRepository.java (69%)

diff --git a/dbrepo-container-service/pom.xml b/dbrepo-container-service/pom.xml
index 8c4c65ef61..b6e164c44e 100644
--- a/dbrepo-container-service/pom.xml
+++ b/dbrepo-container-service/pom.xml
@@ -94,11 +94,6 @@
             <artifactId>spring-data-opensearch</artifactId>
             <version>${opensearch-client.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.opensearch.client</groupId>
-            <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch-client.version}</version>
-        </dependency>
         <!-- Entity and API -->
         <dependency>
             <groupId>at.tuwien</groupId>
diff --git a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java
index 7ef30669bc..dfc87fe1bd 100644
--- a/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java
+++ b/dbrepo-container-service/rest-service/src/main/java/at/tuwien/DbrepoContainerManagingApplication.java
@@ -2,7 +2,9 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
+import org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
 import org.springframework.transaction.annotation.EnableTransactionManagement;
diff --git a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml b/dbrepo-container-service/rest-service/src/main/resources/application-local.yml
index 2af1c6bc21..515bfd5174 100644
--- a/dbrepo-container-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-container-service/rest-service/src/main/resources/application-local.yml
@@ -27,6 +27,10 @@ spring:
     virtual-host: dbrepo
     username: fda
     password: fda
+  opensearch:
+    username: admin
+    password: admin
+    uris: http://localhost:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 springdoc.swagger-ui.enabled: true
 server:
@@ -47,7 +51,3 @@ fda:
   client_secret: client-secret
   client_id: dbrepo-client
   gateway.endpoint: http://localhost
-  opensearch:
-    username: admin
-    password: admin
-    uris: http://localhost:9200
\ No newline at end of file
diff --git a/dbrepo-container-service/rest-service/src/main/resources/application.yml b/dbrepo-container-service/rest-service/src/main/resources/application.yml
index 907baa318f..b2722c825f 100644
--- a/dbrepo-container-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-container-service/rest-service/src/main/resources/application.yml
@@ -1,5 +1,7 @@
 app.version: '@project.version@'
 spring:
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   main.banner-mode: off
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
@@ -27,6 +29,10 @@ spring:
     virtual-host: dbrepo
     username: "${BROKER_USERNAME}"
     password: "${BROKER_PASSWORD}"
+  opensearch:
+    username: "${SEARCH_USERNAME}"
+    password: "${SEARCH_PASSWORD}"
+    uris: http://search-db:9200
 management.endpoints.web.exposure.include: health,info,prometheus
 springdoc.swagger-ui.enabled: true
 server:
@@ -46,8 +52,4 @@ fda:
     public_key: "${JWT_PUBKEY}"
   client_secret: "${DBREPO_CLIENT_SECRET}"
   client_id: "${CLIENT_ID}"
-  gateway.endpoint: http://gateway-service
-  opensearch:
-    username: "${SEARCH_USERNAME}"
-    password: "${SEARCH_PASSWORD}"
-    uris: http://search-db:9200
\ No newline at end of file
+  gateway.endpoint: http://gateway-service
\ No newline at end of file
diff --git a/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000..27d815cc6f
--- /dev/null
+++ b/dbrepo-container-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,35 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    public RestHighLevelClient openSearchClient() {
+        log.debug("openSearch endpoint={}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+
+}
\ No newline at end of file
diff --git a/dbrepo-database-service/pom.xml b/dbrepo-database-service/pom.xml
index 021bcf9c1a..bf7922f997 100644
--- a/dbrepo-database-service/pom.xml
+++ b/dbrepo-database-service/pom.xml
@@ -31,7 +31,7 @@
         <c3p0.version>0.9.5.5</c3p0.version>
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <opensearch.version>1.1.0</opensearch.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -72,7 +72,7 @@
         <dependency>
             <groupId>org.opensearch.client</groupId>
             <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch.version}</version>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- AMQP -->
         <dependency>
@@ -116,6 +116,11 @@
             <artifactId>mariadb-java-client</artifactId>
             <version>${mariadb.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
         <!-- Entity, API, QueryStore -->
         <dependency>
             <groupId>at.tuwien</groupId>
@@ -136,6 +141,12 @@
             <scope>compile</scope>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java
index 306944de33..bcc12b9542 100644
--- a/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java
+++ b/dbrepo-database-service/rest-service/src/main/java/at/tuwien/DbrepoDatabaseManagingApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
diff --git a/dbrepo-database-service/rest-service/src/main/resources/application.yml b/dbrepo-database-service/rest-service/src/main/resources/application.yml
index 3202f76b38..3ca17044ae 100644
--- a/dbrepo-database-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-database-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
diff --git a/dbrepo-identifier-service/pom.xml b/dbrepo-identifier-service/pom.xml
index ef0bed4d9d..d4d0a38cc0 100644
--- a/dbrepo-identifier-service/pom.xml
+++ b/dbrepo-identifier-service/pom.xml
@@ -35,7 +35,7 @@
         <super-csv.version>2.4.0</super-csv.version>
         <jsql.version>4.6</jsql.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <opensearch.version>1.1.0</opensearch.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -100,8 +100,8 @@
         </dependency>
         <dependency>
             <groupId>org.opensearch.client</groupId>
-            <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch.version}</version>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- Docker -->
         <dependency>
@@ -129,6 +129,12 @@
             <version>${springdoc-openapi.version}</version>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
diff --git a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java
index 2104df15d6..79d1fba1d7 100644
--- a/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java
+++ b/dbrepo-identifier-service/rest-service/src/main/java/at/tuwien/DbrepoIdentifierServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
diff --git a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml b/dbrepo-identifier-service/rest-service/src/main/resources/application.yml
index 23fcfe2727..73b6c7b5ee 100644
--- a/dbrepo-identifier-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-identifier-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
index 5715b7cd29..24a7799130 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/DatabaseDto.java
@@ -10,10 +10,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+
 import java.time.Instant;
 import java.util.List;
 
@@ -24,7 +25,7 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "databaseindex", createIndex = false)
+@Document(indexName = "database")
 public class DatabaseDto {
 
     @NotNull
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java
index 7a5f80d2bc..8aeb060772 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/ViewDto.java
@@ -7,10 +7,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+
 import java.time.Instant;
 import java.util.UUID;
 
@@ -21,7 +22,7 @@ import java.util.UUID;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "viewindex", createIndex = false)
+@Document(indexName = "view")
 public class ViewDto {
 
     @NotNull
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
index cf7d14f940..8696a09278 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableDto.java
@@ -4,15 +4,15 @@ import at.tuwien.api.database.table.columns.ColumnDto;
 import at.tuwien.api.database.table.constraints.ConstraintsDto;
 import at.tuwien.api.user.UserBriefDto;
 import com.fasterxml.jackson.annotation.JsonFormat;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+
 import java.time.Instant;
 import java.util.List;
 
@@ -23,13 +23,15 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "tableindex", createIndex = false)
+@Document(indexName = "table")
 public class TableDto {
 
-    @JsonIgnore
+    @NotNull
+    @JsonProperty("container_id")
     private Long containerId;
 
-    @JsonIgnore
+    @NotNull
+    @JsonProperty("database_id")
     private Long databaseId;
 
     @NotNull
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java
new file mode 100644
index 0000000000..010bc68af2
--- /dev/null
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/TableKeyDto.java
@@ -0,0 +1,24 @@
+package at.tuwien.api.database.table;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Jacksonized
+@ToString
+public class TableKeyDto {
+
+    @NotNull
+    private Long containerId;
+
+    @NotNull
+    private Long databaseId;
+
+    @NotNull
+    private Long id;
+}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
index 612f15d86d..68c7934e18 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnDto.java
@@ -3,16 +3,15 @@ package at.tuwien.api.database.table.columns;
 import at.tuwien.api.container.image.ImageDateDto;
 import at.tuwien.api.database.table.columns.concepts.ConceptDto;
 import at.tuwien.api.database.table.columns.concepts.UnitDto;
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
 
 @Getter
 @Setter
@@ -21,16 +20,19 @@ import jakarta.validation.constraints.NotNull;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "columnindex", createIndex = false)
+@Document(indexName = "column")
 public class ColumnDto {
 
-    @JsonIgnore
+    @NotNull
+    @JsonProperty("container_id")
     private Long containerId;
 
-    @JsonIgnore
+    @NotNull
+    @JsonProperty("database_id")
     private Long databaseId;
 
-    @JsonIgnore
+    @NotNull
+    @JsonProperty("table_id")
     private Long tableId;
 
     @NotNull
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnKeyDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnKeyDto.java
new file mode 100644
index 0000000000..28dc203f03
--- /dev/null
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/database/table/columns/ColumnKeyDto.java
@@ -0,0 +1,27 @@
+package at.tuwien.api.database.table.columns;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.*;
+import lombok.extern.jackson.Jacksonized;
+
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@Jacksonized
+@ToString
+public class ColumnKeyDto {
+
+    @NotNull
+    private Long containerId;
+
+    @NotNull
+    private Long databaseId;
+
+    @NotNull
+    private Long tableId;
+
+    @NotNull
+    private Long id;
+}
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
index 592c7cfc8c..1a3619663c 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/identifier/IdentifierDto.java
@@ -9,10 +9,11 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
 import lombok.extern.jackson.Jacksonized;
-import org.springframework.data.elasticsearch.annotations.Document;
 
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
+import org.springframework.data.elasticsearch.annotations.Document;
+
 import java.time.Instant;
 import java.util.List;
 
@@ -23,7 +24,7 @@ import java.util.List;
 @AllArgsConstructor
 @Jacksonized
 @ToString
-@Document(indexName = "identifierindex", createIndex = false)
+@Document(indexName = "identifier", createIndex = false)
 public class IdentifierDto {
 
     private Long id;
diff --git a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
index 6197dd0697..88a86abd65 100644
--- a/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
+++ b/dbrepo-metadata-db/api/src/main/java/at/tuwien/api/user/UserDto.java
@@ -7,6 +7,7 @@ import lombok.*;
 
 import jakarta.validation.constraints.NotNull;
 import lombok.extern.jackson.Jacksonized;
+import org.springframework.data.elasticsearch.annotations.Document;
 
 import java.util.List;
 import java.util.UUID;
@@ -18,6 +19,7 @@ import java.util.UUID;
 @AllArgsConstructor
 @Jacksonized
 @ToString
+@Document(indexName = "user")
 public class UserDto {
 
     @NotNull
diff --git a/dbrepo-metadata-db/pom.xml b/dbrepo-metadata-db/pom.xml
index 284747e3d7..0fb24fd6ea 100644
--- a/dbrepo-metadata-db/pom.xml
+++ b/dbrepo-metadata-db/pom.xml
@@ -32,7 +32,7 @@
         <jackson-datatype.version>2.15.0</jackson-datatype.version>
         <commons.version>2.11.0</commons.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <opensearch.version>1.1.0</opensearch.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -48,15 +48,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
         </dependency>
-        <!-- DataSource -->
-        <dependency>
-            <groupId>org.springframework.data</groupId>
-            <artifactId>spring-data-elasticsearch</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.opensearch.client</groupId>
-            <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch.version}</version>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- Mapping -->
         <dependency>
diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml
index beddd0a5da..26bff609d2 100644
--- a/dbrepo-metadata-service/pom.xml
+++ b/dbrepo-metadata-service/pom.xml
@@ -49,6 +49,7 @@
         <keycloak.version>21.0.2</keycloak.version>
         <hibernate.version>6.2.2.Final</hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -83,6 +84,11 @@
             <artifactId>mariadb-java-client</artifactId>
             <version>${mariadb.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
         <!-- Monitoring -->
         <dependency>
             <groupId>io.micrometer</groupId>
@@ -150,6 +156,12 @@
             <version>${springdoc-openapi.version}</version>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
diff --git a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java
index 1b6c8a38f5..2b5ef54ee2 100644
--- a/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java
+++ b/dbrepo-metadata-service/rest-service/src/main/java/at/tuwien/DbrepoMetadataServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
diff --git a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
index 0ec7b7bc08..ff401e9fe0 100644
--- a/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-metadata-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
new file mode 100644
index 0000000000..27d815cc6f
--- /dev/null
+++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -0,0 +1,35 @@
+package at.tuwien.config;
+
+import lombok.extern.log4j.Log4j2;
+import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.ClientConfiguration;
+import org.opensearch.data.client.orhlc.RestClients;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Log4j2
+@Configuration
+public class OpenSearchConfig {
+
+    @Value("${spring.opensearch.uris}")
+    private String openSearchEndpoint;
+
+    @Value("${spring.opensearch.username}")
+    private String openSearchUsername;
+
+    @Value("${spring.opensearch.password}")
+    private String openSearchPassword;
+
+    @Bean
+    public RestHighLevelClient openSearchClient() {
+        log.debug("openSearch endpoint={}", openSearchEndpoint);
+        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
+                .connectedTo(openSearchEndpoint)
+                .withBasicAuth(openSearchUsername, openSearchPassword)
+                .build();
+        return RestClients.create(clientConfiguration)
+                .rest();
+    }
+
+}
\ No newline at end of file
diff --git a/dbrepo-query-service/pom.xml b/dbrepo-query-service/pom.xml
index 9274612bde..e529441353 100644
--- a/dbrepo-query-service/pom.xml
+++ b/dbrepo-query-service/pom.xml
@@ -51,7 +51,7 @@
         <c3p0.version>0.9.5.5</c3p0.version>
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <opensearch.version>1.1.0</opensearch.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -123,8 +123,8 @@
         </dependency>
         <dependency>
             <groupId>org.opensearch.client</groupId>
-            <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch.version}</version>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- AMPQ -->
         <dependency>
diff --git a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java
index af5e7ef229..34e5ffeca0 100644
--- a/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java
+++ b/dbrepo-query-service/rest-service/src/main/java/at/tuwien/DbrepoQueryServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
diff --git a/dbrepo-query-service/rest-service/src/main/resources/application.yml b/dbrepo-query-service/rest-service/src/main/resources/application.yml
index 5caaab1e9b..8bc1f82c6f 100644
--- a/dbrepo-query-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-query-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
diff --git a/dbrepo-semantics-service/pom.xml b/dbrepo-semantics-service/pom.xml
index 08ba51d910..6070573876 100644
--- a/dbrepo-semantics-service/pom.xml
+++ b/dbrepo-semantics-service/pom.xml
@@ -36,7 +36,7 @@
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <apache-jena.version>4.8.0</apache-jena.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <opensearch.version>1.1.0</opensearch.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -95,8 +95,8 @@
         </dependency>
         <dependency>
             <groupId>org.opensearch.client</groupId>
-            <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch.version}</version>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- Testing -->
         <dependency>
diff --git a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java
index bec2e19c3b..76350f4b41 100644
--- a/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java
+++ b/dbrepo-semantics-service/rest-service/src/main/java/at/tuwien/DbrepoSemanticsServiceApplication.java
@@ -3,6 +3,7 @@ package at.tuwien;
 import org.apache.jena.sys.JenaSystem;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
diff --git a/dbrepo-semantics-service/rest-service/src/main/resources/application.yml b/dbrepo-semantics-service/rest-service/src/main/resources/application.yml
index 752873494f..5e9feb19bc 100644
--- a/dbrepo-semantics-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-semantics-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
diff --git a/dbrepo-table-service/pom.xml b/dbrepo-table-service/pom.xml
index b32a4dde83..b686d22c3b 100644
--- a/dbrepo-table-service/pom.xml
+++ b/dbrepo-table-service/pom.xml
@@ -34,7 +34,7 @@
         <c3p0.version>0.9.5.5</c3p0.version>
         <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <opensearch.version>1.1.0</opensearch.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -120,16 +120,21 @@
             <artifactId>hibernate-c3p0</artifactId>
             <version>${c3p0-hibernate.version}</version>
         </dependency>
-        <dependency>
-            <groupId>org.opensearch.client</groupId>
-            <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch.version}</version>
-        </dependency>
         <dependency>
             <groupId>org.mariadb.jdbc</groupId>
             <artifactId>mariadb-java-client</artifactId>
             <version>${mariadb.version}</version>
         </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-starter</artifactId>
+            <version>${opensearch-client.version}</version>
+        </dependency>
         <!-- SQL Parser -->
         <dependency>
             <groupId>com.github.jsqlparser</groupId>
@@ -150,6 +155,12 @@
             <version>${rabbit-amqp-client.version}</version>
         </dependency>
         <!-- Testing -->
+        <dependency>
+            <groupId>org.opensearch.client</groupId>
+            <artifactId>spring-data-opensearch-test-autoconfigure</artifactId>
+            <version>${opensearch-client.version}</version>
+            <scope>test</scope>
+        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
diff --git a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java
index a96e2effc7..21af60ba70 100644
--- a/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java
+++ b/dbrepo-table-service/rest-service/src/main/java/at/tuwien/DbrepoTableServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
@@ -10,11 +11,11 @@ import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
 @EnableJpaAuditing
-@SpringBootApplication
 @EnableTransactionManagement
 @EntityScan(basePackages = {"at.tuwien.entities"})
-@EnableElasticsearchRepositories(basePackages = {"at.tuwien.repository.elastic"})
-@EnableJpaRepositories(basePackages = {"at.tuwien.repository.jpa"})
+@EnableElasticsearchRepositories
+@EnableJpaRepositories(basePackages = {"at.tuwien.repository.mdb", "at.tuwien.repository.sdb"})
+@SpringBootApplication(exclude = {ElasticsearchDataAutoConfiguration.class})
 public class DbrepoTableServiceApplication {
 
     public static void main(String[] args) {
diff --git a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml b/dbrepo-table-service/rest-service/src/main/resources/application-local.yml
index 65be9f4bda..8dc8303bba 100644
--- a/dbrepo-table-service/rest-service/src/main/resources/application-local.yml
+++ b/dbrepo-table-service/rest-service/src/main/resources/application-local.yml
@@ -28,7 +28,7 @@ spring:
   opensearch:
     username: admin
     password: admin
-    uris: http://localhost:9200
+    uris: localhost:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-table-service/rest-service/src/main/resources/application.yml b/dbrepo-table-service/rest-service/src/main/resources/application.yml
index d874155e5c..a91591b9ad 100644
--- a/dbrepo-table-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-table-service/rest-service/src/main/resources/application.yml
@@ -28,7 +28,7 @@ spring:
   opensearch:
     username: "${SEARCH_USERNAME}"
     password: "${SEARCH_PASSWORD}"
-    uris: http://search-db:9200
+    uris: search-db:9200
   cloud:
     loadbalancer.ribbon.enabled: false
 management.endpoints.web.exposure.include: health,info,prometheus
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java
index 2dd1a03a5a..6ba5c6fee7 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableColumnEndpointUnitTest.java
@@ -11,8 +11,8 @@ import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.TableService;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java
index e52f7c89de..ab7b30e6a3 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointIntegrationTest.java
@@ -7,9 +7,9 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.endpoints.TableEndpoint;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
+import at.tuwien.repository.mdb.*;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.AfterEach;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
index 3ea4f20546..49b1b0a669 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java
@@ -11,8 +11,8 @@ import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.service.AccessService;
 import at.tuwien.service.DatabaseService;
 import at.tuwien.service.TableService;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
index c84163790c..3d27d0c923 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/gateway/QueryServiceGatewayUnitTest.java
@@ -4,8 +4,8 @@ import at.tuwien.BaseUnitTest;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.AmqpException;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.Test;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java
index 234ce6491e..2ec5fe43e9 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/mapper/TableMapperUnitTest.java
@@ -1,15 +1,12 @@
 package at.tuwien.mapper;
 
 import at.tuwien.BaseUnitTest;
-import at.tuwien.api.database.AccessTypeDto;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
-import at.tuwien.exception.NotAllowedException;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
-import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.Arguments;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
index d91e8827fb..29b42b6f6f 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/MessageQueueServiceIntegrationTest.java
@@ -6,9 +6,8 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.config.DockerConfig;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.utils.AmqpUtils;
 import com.rabbitmq.client.BuiltinExchangeType;
 import com.rabbitmq.client.Channel;
@@ -46,7 +45,7 @@ public class MessageQueueServiceIntegrationTest extends BaseUnitTest {
     private TableColumnIdxRepository tableColumnidxRepository;
 
     @MockBean
-    private TableRepository tableRepository;
+    private at.tuwien.repository.mdb.TableRepository tableRepository;
 
     @Autowired
     private AmqpUtils amqpUtils;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
index 2759fe65b2..e65f776d75 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationReadTest.java
@@ -7,9 +7,9 @@ import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
+import at.tuwien.repository.mdb.*;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.junit.jupiter.api.*;
@@ -66,7 +66,7 @@ public class TableServiceIntegrationReadTest extends BaseUnitTest {
     private DatabaseRepository databaseRepository;
 
     @Autowired
-    private TableRepository tableRepository;
+    private at.tuwien.repository.mdb.TableRepository tableRepository;
 
     @Autowired
     private TableService tableService;
diff --git a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
index d3482ae758..254d3c2d60 100644
--- a/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
+++ b/dbrepo-table-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationWriteTest.java
@@ -8,9 +8,9 @@ import at.tuwien.config.H2Utils;
 import at.tuwien.config.IndexConfig;
 import at.tuwien.config.ReadyConfig;
 import at.tuwien.exception.*;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.*;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
+import at.tuwien.repository.mdb.*;
 import com.rabbitmq.client.Channel;
 import lombok.extern.log4j.Log4j2;
 import org.apache.http.auth.BasicUserPrincipal;
@@ -67,7 +67,7 @@ public class TableServiceIntegrationWriteTest extends BaseUnitTest {
     private DatabaseRepository databaseRepository;
 
     @Autowired
-    private TableRepository tableRepository;
+    private at.tuwien.repository.mdb.TableRepository tableRepository;
 
     @Autowired
     private TableService tableService;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java
index e6f97043de..387acfe392 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/IndexConfig.java
@@ -3,18 +3,13 @@ package at.tuwien.config;
 import at.tuwien.api.database.table.TableDto;
 import at.tuwien.api.database.table.columns.ColumnDto;
 import at.tuwien.mapper.TableMapper;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.TableColumnRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableColumnRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import lombok.extern.log4j.Log4j2;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.context.event.ApplicationReadyEvent;
 import org.springframework.context.event.EventListener;
-import org.springframework.core.env.Environment;
-import org.springframework.core.env.Profiles;
-import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
-import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates;
 import org.springframework.stereotype.Component;
 import org.springframework.transaction.annotation.Transactional;
 
@@ -25,46 +20,24 @@ import java.util.stream.Collectors;
 @Log4j2
 public class IndexConfig {
 
-    private final Environment environment;
     private final TableMapper tableMapper;
     private final TableRepository tableRepository;
     private final TableIdxRepository tableIdxRepository;
     private final TableColumnRepository tableColumnRepository;
-    private final ElasticsearchOperations elasticsearchOperations;
     private final TableColumnIdxRepository tableColumnIdxRepository;
 
-    @Autowired
-    public IndexConfig(Environment environment, TableMapper tableMapper, TableRepository tableRepository,
-                       TableIdxRepository tableIdxRepository, TableColumnRepository tableColumnRepository,
-                       ElasticsearchOperations elasticsearchOperations,
-                       TableColumnIdxRepository tableColumnIdxRepository) {
-        this.environment = environment;
+    public IndexConfig(TableMapper tableMapper, TableRepository tableRepository, TableIdxRepository tableIdxRepository,
+                       TableColumnRepository tableColumnRepository, TableColumnIdxRepository tableColumnIdxRepository) {
         this.tableMapper = tableMapper;
         this.tableRepository = tableRepository;
         this.tableIdxRepository = tableIdxRepository;
         this.tableColumnRepository = tableColumnRepository;
-        this.elasticsearchOperations = elasticsearchOperations;
         this.tableColumnIdxRepository = tableColumnIdxRepository;
     }
 
     @Transactional
     @EventListener(ApplicationReadyEvent.class)
     public void initIndex() {
-        if (environment.acceptsProfiles(Profiles.of("test-noelastic"))) {
-            return;
-        }
-        log.debug("creating tableindex");
-        final IndexCoordinates tableIndex = IndexCoordinates.of("tableindex");
-        if (!elasticsearchOperations.indexOps(tableIndex).exists()) {
-            elasticsearchOperations.indexOps(tableIndex).create();
-            elasticsearchOperations.indexOps(tableIndex).createMapping(TableDto.class);
-        }
-        log.debug("creating columnindex");
-        final IndexCoordinates columnIndex = IndexCoordinates.of("columnindex");
-        if (!elasticsearchOperations.indexOps(columnIndex).exists()) {
-            elasticsearchOperations.indexOps(columnIndex).create();
-            elasticsearchOperations.indexOps(columnIndex).createMapping(ColumnDto.class);
-        }
         /* pre-fill */
         final List<TableDto> tables = tableRepository.findAll()
                 .stream()
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java b/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
index 27d815cc6f..2456e27f4e 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/config/OpenSearchConfig.java
@@ -2,6 +2,7 @@ package at.tuwien.config;
 
 import lombok.extern.log4j.Log4j2;
 import org.opensearch.client.RestHighLevelClient;
+import org.opensearch.data.client.orhlc.AbstractOpenSearchConfiguration;
 import org.opensearch.data.client.orhlc.ClientConfiguration;
 import org.opensearch.data.client.orhlc.RestClients;
 import org.springframework.beans.factory.annotation.Value;
@@ -10,7 +11,7 @@ import org.springframework.context.annotation.Configuration;
 
 @Log4j2
 @Configuration
-public class OpenSearchConfig {
+public class OpenSearchConfig extends AbstractOpenSearchConfiguration {
 
     @Value("${spring.opensearch.uris}")
     private String openSearchEndpoint;
@@ -22,7 +23,8 @@ public class OpenSearchConfig {
     private String openSearchPassword;
 
     @Bean
-    public RestHighLevelClient openSearchClient() {
+    @Override
+    public RestHighLevelClient opensearchClient() {
         log.debug("openSearch endpoint={}", openSearchEndpoint);
         final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                 .connectedTo(openSearchEndpoint)
@@ -31,5 +33,4 @@ public class OpenSearchConfig {
         return RestClients.create(clientConfiguration)
                 .rest();
     }
-
 }
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
index 688e44c832..6c2d65f211 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/mapper/TableMapper.java
@@ -7,9 +7,6 @@ import at.tuwien.api.database.table.TableDto;
 import at.tuwien.api.database.table.columns.ColumnCreateDto;
 import at.tuwien.api.database.table.columns.ColumnDto;
 import at.tuwien.api.database.table.columns.ColumnTypeDto;
-import at.tuwien.api.database.table.columns.concepts.ColumnSemanticsUpdateDto;
-import at.tuwien.api.database.table.columns.concepts.ConceptSaveDto;
-import at.tuwien.api.database.table.columns.concepts.UnitSaveDto;
 import at.tuwien.api.database.table.constraints.ConstraintsCreateDto;
 import at.tuwien.api.database.table.constraints.foreignKey.ForeignKeyCreateDto;
 import at.tuwien.api.database.table.constraints.foreignKey.ForeignKeyDto;
@@ -29,7 +26,7 @@ import at.tuwien.entities.database.table.constraints.unique.Unique;
 import at.tuwien.exception.ImageNotSupportedException;
 import at.tuwien.exception.QueryMalformedException;
 import at.tuwien.exception.TableMalformedException;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableRepository;
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.Mappings;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java
similarity index 91%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java
index 52e9f9d082..1cf729a259 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ConceptRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ConceptRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumnConcept;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
index 39566b1cc0..f41d2aa3fa 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ContainerRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ContainerRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.Container;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
similarity index 80%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
index a91fb2ee2f..f117748c36 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseAccessRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseAccessRepository.java
@@ -1,6 +1,7 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.DatabaseAccess;
+import at.tuwien.entities.database.DatabaseAccessKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -8,7 +9,7 @@ import org.springframework.stereotype.Repository;
 import java.util.Optional;
 
 @Repository
-public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, Long> {
+public interface DatabaseAccessRepository extends JpaRepository<DatabaseAccess, DatabaseAccessKey> {
 
     @Query("select a from DatabaseAccess a where a.hdbid = :databaseId and a.user.username = :username")
     Optional<DatabaseAccess> findByDatabaseIdAndUsername(Long databaseId, String username);
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
similarity index 97%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
index f945f6eb2b..2ea6e5234a 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/DatabaseRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/DatabaseRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageEnvironmentRepository.java
similarity index 59%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageEnvironmentRepository.java
index c25e8577e2..6bb192292f 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageEnvironmentRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageEnvironmentRepository.java
@@ -1,11 +1,11 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
-import at.tuwien.entities.container.image.ContainerImage;
 import at.tuwien.entities.container.image.ContainerImageEnvironmentItem;
+import at.tuwien.entities.container.image.ContainerImageEnvironmentItemKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface ImageEnvironmentRepository extends JpaRepository<ContainerImageEnvironmentItem, Long> {
+public interface ImageEnvironmentRepository extends JpaRepository<ContainerImageEnvironmentItem, ContainerImageEnvironmentItemKey> {
 
 }
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
index 247ce97770..046fd51c3e 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/ImageRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/ImageRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.container.image.ContainerImage;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
index 75c296f527..fab911633e 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/OntologyRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/OntologyRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.semantics.Ontology;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
similarity index 88%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
index 5b5855dec8..7b53e72459 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/RealmRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/RealmRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.Realm;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
similarity index 66%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
index 9441d45125..b52cc85d35 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableColumnRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableColumnRepository.java
@@ -1,10 +1,11 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumn;
+import at.tuwien.entities.database.table.columns.TableColumnKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableColumnRepository extends JpaRepository<TableColumn, Long> {
+public interface TableColumnRepository extends JpaRepository<TableColumn, TableColumnKey> {
 
 }
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
similarity index 80%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
index c629a9b493..77541d67b7 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/TableRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/TableRepository.java
@@ -1,7 +1,8 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.Database;
 import at.tuwien.entities.database.table.Table;
+import at.tuwien.entities.database.table.TableKey;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
 
@@ -9,7 +10,7 @@ import java.util.List;
 import java.util.Optional;
 
 @Repository
-public interface TableRepository extends JpaRepository<Table, Long> {
+public interface TableRepository extends JpaRepository<Table, TableKey> {
 
     List<Table> findByDatabaseOrderByCreatedDesc(Database database);
 
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java
similarity index 91%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java
index 69ae3d7e51..a88ba4ff43 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UnitRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UnitRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.database.table.columns.TableColumnUnit;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
similarity index 90%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
index 9eb0b51902..42d09c3e9e 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/jpa/UserRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/mdb/UserRepository.java
@@ -1,4 +1,4 @@
-package at.tuwien.repository.jpa;
+package at.tuwien.repository.mdb;
 
 import at.tuwien.entities.user.User;
 import org.springframework.data.jpa.repository.JpaRepository;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
similarity index 67%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
index 7df09d4e44..7fcd93f713 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableColumnIdxRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableColumnIdxRepository.java
@@ -1,9 +1,10 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.table.columns.ColumnDto;
+import at.tuwien.api.database.table.columns.ColumnKeyDto;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, Long> {
+public interface TableColumnIdxRepository extends ElasticsearchRepository<ColumnDto, ColumnKeyDto> {
 }
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
similarity index 69%
rename from dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java
rename to dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
index ce6e8a0975..f672e53c3b 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/repository/elastic/TableIdxRepository.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/repository/sdb/TableIdxRepository.java
@@ -1,9 +1,10 @@
-package at.tuwien.repository.elastic;
+package at.tuwien.repository.sdb;
 
 import at.tuwien.api.database.table.TableDto;
+import at.tuwien.entities.database.table.TableKey;
 import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
 import org.springframework.stereotype.Repository;
 
 @Repository
-public interface TableIdxRepository extends ElasticsearchRepository<TableDto, Long> {
+public interface TableIdxRepository extends ElasticsearchRepository<TableDto, TableKey> {
 }
\ No newline at end of file
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
index 91d4f41a8a..85fc7196d4 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/AccessServiceImpl.java
@@ -3,7 +3,7 @@ package at.tuwien.service.impl;
 import at.tuwien.entities.database.DatabaseAccess;
 import at.tuwien.exception.AccessDeniedException;
 import at.tuwien.exception.NotAllowedException;
-import at.tuwien.repository.jpa.DatabaseAccessRepository;
+import at.tuwien.repository.mdb.DatabaseAccessRepository;
 import at.tuwien.service.AccessService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
index 35f7e99b84..13d425c5a9 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/ContainerServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.container.Container;
 import at.tuwien.exception.ContainerNotFoundException;
-import at.tuwien.repository.jpa.ContainerRepository;
+import at.tuwien.repository.mdb.ContainerRepository;
 import at.tuwien.service.ContainerService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
index ff16e63370..a4437d6461 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceImpl.java
@@ -2,13 +2,12 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.Database;
 import at.tuwien.exception.DatabaseNotFoundException;
-import at.tuwien.repository.jpa.DatabaseRepository;
+import at.tuwien.repository.mdb.DatabaseRepository;
 import at.tuwien.service.DatabaseService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
-import java.security.Principal;
 import java.util.Optional;
 
 @Log4j2
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java
index 29d7a97826..1984eaf285 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/RabbitMqService.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.database.table.Table;
 import at.tuwien.exception.*;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableRepository;
 import at.tuwien.service.MessageQueueService;
 import com.rabbitmq.client.*;
 import lombok.extern.log4j.Log4j2;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
index 94cd509ae8..fd1954ddd9 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/SemanticServiceImpl.java
@@ -8,9 +8,9 @@ import at.tuwien.exception.SemanticEntityNotFoundException;
 import at.tuwien.exception.UnitNotFoundException;
 import at.tuwien.gateway.SemanticServiceGateway;
 import at.tuwien.mapper.TableMapper;
-import at.tuwien.repository.jpa.ConceptRepository;
-import at.tuwien.repository.jpa.OntologyRepository;
-import at.tuwien.repository.jpa.UnitRepository;
+import at.tuwien.repository.mdb.ConceptRepository;
+import at.tuwien.repository.mdb.OntologyRepository;
+import at.tuwien.repository.mdb.UnitRepository;
 import at.tuwien.service.SemanticService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
index c0b1681e8b..aada8f5a92 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/TableServiceImpl.java
@@ -10,10 +10,10 @@ import at.tuwien.entities.database.table.columns.TableColumn;
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.*;
 import at.tuwien.mapper.TableMapper;
-import at.tuwien.repository.elastic.TableColumnIdxRepository;
-import at.tuwien.repository.elastic.TableIdxRepository;
-import at.tuwien.repository.jpa.TableColumnRepository;
-import at.tuwien.repository.jpa.TableRepository;
+import at.tuwien.repository.mdb.TableColumnRepository;
+import at.tuwien.repository.mdb.TableRepository;
+import at.tuwien.repository.sdb.TableColumnIdxRepository;
+import at.tuwien.repository.sdb.TableIdxRepository;
 import at.tuwien.service.*;
 import com.mchange.v2.c3p0.ComboPooledDataSource;
 import lombok.extern.log4j.Log4j2;
@@ -46,7 +46,7 @@ public class TableServiceImpl extends HibernateConnector implements TableService
     public TableServiceImpl(TableMapper tableMapper, UserService userService, SemanticService semanticService,
                             TableRepository tableRepository, DatabaseService databaseService,
                             ContainerService containerService, TableIdxRepository tableIdxRepository,
-                            TableColumnRepository tableColumnRepository,
+                            at.tuwien.repository.mdb.TableColumnRepository tableColumnRepository,
                             TableColumnIdxRepository tableColumnIdxRepository) {
         this.tableMapper = tableMapper;
         this.userService = userService;
diff --git a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
index 2c7df8b36c..47f1ac286b 100644
--- a/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
+++ b/dbrepo-table-service/services/src/main/java/at/tuwien/service/impl/UserServiceImpl.java
@@ -2,7 +2,7 @@ package at.tuwien.service.impl;
 
 import at.tuwien.entities.user.User;
 import at.tuwien.exception.UserNotFoundException;
-import at.tuwien.repository.jpa.UserRepository;
+import at.tuwien.repository.mdb.UserRepository;
 import at.tuwien.service.UserService;
 import lombok.extern.log4j.Log4j2;
 import org.springframework.beans.factory.annotation.Autowired;
diff --git a/dbrepo-user-service/pom.xml b/dbrepo-user-service/pom.xml
index dad7c33127..3c8f18b805 100644
--- a/dbrepo-user-service/pom.xml
+++ b/dbrepo-user-service/pom.xml
@@ -52,7 +52,7 @@
         <keycloak.version>21.0.2</keycloak.version>
         <hibernate.version>6.2.2.Final</hibernate.version>
         <springdoc-openapi.version>2.1.0</springdoc-openapi.version>
-        <opensearch.version>1.1.0</opensearch.version>
+        <opensearch-client.version>1.1.0</opensearch-client.version>
     </properties>
 
     <dependencies>
@@ -118,8 +118,8 @@
         </dependency>
         <dependency>
             <groupId>org.opensearch.client</groupId>
-            <artifactId>spring-data-opensearch-starter</artifactId>
-            <version>${opensearch.version}</version>
+            <artifactId>spring-data-opensearch</artifactId>
+            <version>${opensearch-client.version}</version>
         </dependency>
         <!-- Swagger -->
         <dependency>
diff --git a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java
index 4a6c3dff08..02166da7ee 100644
--- a/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java
+++ b/dbrepo-user-service/rest-service/src/main/java/at/tuwien/FdaUserServiceApplication.java
@@ -2,6 +2,7 @@ package at.tuwien;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
 import org.springframework.data.elasticsearch.repository.config.EnableElasticsearchRepositories;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
diff --git a/dbrepo-user-service/rest-service/src/main/resources/application.yml b/dbrepo-user-service/rest-service/src/main/resources/application.yml
index 910db255f1..345863caf4 100644
--- a/dbrepo-user-service/rest-service/src/main/resources/application.yml
+++ b/dbrepo-user-service/rest-service/src/main/resources/application.yml
@@ -1,6 +1,8 @@
 app.version: '@project.version@'
 spring:
   main.banner-mode: off
+  autoconfigure:
+    exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration, org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
   datasource:
     url: "jdbc:mariadb://metadata-db:3306/${METADATA_DB}"
     driver-class-name: org.mariadb.jdbc.Driver
-- 
GitLab