将SQL Server的BULK INSERT与EntityManager的createNativeQuery一起使用会导致TransactionRequiredException

时间:2019-06-24 21:37:51

标签: java hibernate jpa

所以我一直在努力解决这一问题。

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。我试过包装函数而不是在类级别都没有用。我究竟做错了什么?

0 个答案:

没有答案