/*-
* ============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++;
+ }
+ }
+ });
}
}
+