所以我一直在努力解决这一问题。
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。我试过包装函数而不是在类级别都没有用。我究竟做错了什么?