Revert "Migrate CPS to Spring-boot 3.0"
[cps.git] / cps-ri / src / main / java / org / onap / cps / spi / repository / SchemaSetYangResourceRepositoryImpl.java
index 04eaa45..0f7f2c0 100644 (file)
@@ -1,6 +1,6 @@
 /*-
  * ============LICENSE_START=======================================================
- *  Copyright (C) 2021 Nordix Foundation.
+ *  Copyright (C) 2021-2023 Nordix Foundation.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
 
 package org.onap.cps.spi.repository;
 
+import java.sql.PreparedStatement;
 import java.util.List;
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
+import org.hibernate.Session;
 import org.springframework.transaction.annotation.Transactional;
 
+
 @Transactional
 public class SchemaSetYangResourceRepositoryImpl implements SchemaSetYangResourceRepository {
 
+    private static final int MAX_INSERT_BATCH_SIZE = 100;
+
     @PersistenceContext
     private EntityManager entityManager;
 
     @Override
-    public void insertSchemaSetIdYangResourceId(final Integer schemaSetId, final List<Long> yangResourceId) {
-        final var query = "INSERT INTO SCHEMA_SET_YANG_RESOURCES (SCHEMA_SET_ID, YANG_RESOURCE_ID) "
-                + "VALUES ( :schemaSetId, :yangResourceId)";
-        yangResourceId.forEach(id ->
-                entityManager.createNativeQuery(query)
-                        .setParameter("schemaSetId", schemaSetId)
-                        .setParameter("yangResourceId", id)
-                        .executeUpdate()
-        );
+    public void insertSchemaSetIdYangResourceId(final Integer schemaSetId, final List<Integer> yangResourceIds) {
+        final Session session = entityManager.unwrap(Session.class);
+        session.doWork(connection -> {
+            try (PreparedStatement preparedStatement = connection.prepareStatement(
+                "INSERT INTO SCHEMA_SET_YANG_RESOURCES (SCHEMA_SET_ID, YANG_RESOURCE_ID) VALUES ( ?, ?)")) {
+                int sqlQueryCount = 1;
+                for (final int yangResourceId : yangResourceIds) {
+                    preparedStatement.setInt(1, schemaSetId);
+                    preparedStatement.setInt(2, yangResourceId);
+                    preparedStatement.addBatch();
+                    if (sqlQueryCount % MAX_INSERT_BATCH_SIZE == 0 || sqlQueryCount == yangResourceIds.size()) {
+                        preparedStatement.executeBatch();
+                    }
+                    sqlQueryCount++;
+                }
+            }
+        });
     }
 }
+