Использование BULK INSERT в SQL Server с createNativeQuery в EntityManager приводит к TransactionRequiredException - PullRequest
0 голосов
/ 25 июня 2019

Так что я пытался понять это.

В SQL Server есть способ массового копирования с использованием sql, который они описывают здесь: https://docs.microsoft.com/en-us/sql/connect/jdbc/using-bulk-copy-with-the-jdbc-driver?view=sql-server-2017#single-bulk-copy-operations Они даже используют executeUpdate().

Я пытался сделать это с помощью EntityManager, однако всегда получаю следующее: javax.persistence.TransactionRequiredException: Executing an update/delete query

Вот мой код:

@Service
@Transactional
public class UpdateService {
    private EntityManager emPreStaging;

    @PersistenceContext(unitName = "prestagingEntityManagerFactory")
    public void setEmPreStaging(EntityManager emPreStaging) {
        this.emPreStaging = emPreStaging;
    }

    @Async
    public void insertData(String filePath) {
        _log.info("[Update] Inserting data...");
        try {
            emPreStaging.createNativeQuery("BULK INSERT [test_table] FROM '" + filePath + "' WITH ( FIRSTROW = 2,FORMATFILE = 'C:\\csv\\location\\test.csv'").executeUpdate();
        } catch (Exception e) {
            _log.error("[Update] - Insert Data FAILED - " +e.getMessage());
        } finally {
            emPreStaging.close();
        }
    }
}

В настоящее время я использую org.springframework.transaction.annotation.Transactional, но я также пробовал jpa's. Я попытался обернуть функцию, а не на уровне класса, но безрезультатно. Что я делаю неправильно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...