diff options
author | Toine Siebelink <toine.siebelink@est.tech> | 2022-08-22 14:38:37 +0000 |
---|---|---|
committer | Gerrit Code Review <gerrit@onap.org> | 2022-08-22 14:38:37 +0000 |
commit | 7c1ade44e04bc6fa41141caaaa81f6b9954f7c88 (patch) | |
tree | 6d96478b1c51e9385cc88dda5901137d8a5d5f26 /cps-ri/src/main | |
parent | 8b86190c8687b6883708bf8409cb5efe8615333c (diff) | |
parent | a6633c02eefedcf85639c7d756661f3e756c6634 (diff) |
Merge "Performance Improvement: Insert Yang Resources"
Diffstat (limited to 'cps-ri/src/main')
-rw-r--r-- | cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java index 04eaa453ef..c87e15adbf 100644 --- a/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java +++ b/cps-ri/src/main/java/org/onap/cps/spi/repository/SchemaSetYangResourceRepositoryImpl.java @@ -1,6 +1,6 @@ /*- * ============LICENSE_START======================================================= - * Copyright (C) 2021 Nordix Foundation. + * Copyright (C) 2021-2022 Nordix Foundation. * ================================================================================ * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,26 +20,40 @@ 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<Long> 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 long yangResourceId : yangResourceIds) { + preparedStatement.setInt(1, schemaSetId); + preparedStatement.setLong(2, yangResourceId); + preparedStatement.addBatch(); + if (sqlQueryCount % MAX_INSERT_BATCH_SIZE == 0 || sqlQueryCount == yangResourceIds.size()) { + preparedStatement.executeBatch(); + } + sqlQueryCount++; + } + } + }); } } + |