为什么截断-插入查询没有回滚



我正在截断表,然后插入新数据。不知怎么的,我们出现了类似的错误(数据中的大小更大(。它给出错误,但truncate语句不会回滚。

你能建议一下问题是什么以及如何将其回滚吗?

try {
utx.begin();
List<Company> company = CompanyMapper.MAPPER.entityListToDaoList(query);
logger.log(Level.INFO,"Truncating Table Company!!");
emTarget.createNativeQuery("TRUNCATE TABLE Company").executeUpdate();
logger.log(Level.INFO,"Table Companyrole Company!!");
logger.log(Level.INFO,"Populating Table Company!!  - " + company.size());
for (Company row : company) {
logger.log(Level.INFO,"ROW:" + row.getCompanyid() 
+ "| Address:" + row.getVisitaddress1() 
+ "| Size:" + (row.getVisitaddress1()!=null? row.getVisitaddress1().length():"0"));

emTarget.persist(row);


}
logger.log(Level.INFO,"Populated Table Company!!");
utx.commit();
} catch (Exception e) {
e.printStackTrace();
utx.rollback();
logger.log(Level.SEVERE, "Persist transaction failed. Rollback activated", e.getMessage());
throw new PersistenceException("There was an error reading the source table");
}

我正在使用Oracle。

TRUNCATE TABLE的Oracle文档中所述,您不能回滚:

注意:不能回滚TRUNCATE TABLE语句,也不能使用FLASHBACK TABLE语句检索已被截断的表。

如果您想要回滚功能,则需要使用DELETE(这可能比截断慢得多(。

尝试使用DELETE而不是TRUNCATE

CCD_ 7是DDL,而CCD_。

有几种数据库实现无法回滚DDL。

您不能回滚TRUNCATE。但是,如果必须使用DELETE。

相关内容

  • 没有找到相关文章

最新更新