您好我试图跟踪我的Apache POI读取excel文件导入到数据库。我将导入进度(%Progress,time等)持久化到数据库中的单独表,以便我可以查询数据导入进度。
我的问题是实体管理器只保留“progress”状态一次,这是在将数据加载到数据库的方法的最后。
Java
@Inject
private EntityManager em;
public void importTheData(String path){
try
{
FileInputStream file = new FileInputStream(path);
wb = WorkbookFactory.create(file);
} catch (Exception ex) {}
Sheet sheet = wb.getSheetAt(0);
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
try {
row = sheet.getRow(i);
Table theTable = new Table();
theTable.setDate(row.getCell(0).getDateCellValue());
theTable.setDate1(row.getCell(1).getDateCellValue());
theTable.setDate2(row.getCell(2).getDateCellValue());
bdt.add(theTable);
}
public void importtheTable() {
for(int i=0; i<bdt.size();i++)
{
em.persist(bdt.get(i));
if(i%2000 == 0){
em.flush();
em.clear();
}
}
}
方法setProgress(path,(100 * i / theTable.getLastRowNum()))尝试将进度状态持久保存到单独的表中,但这只发生一次(最后)
有人可以帮帮我吗?
由于
答案 0 :(得分:3)
这取决于事务的范围,您是否使用注释来定义它?如果是,这就解释了为什么一切都在最后完成。
如果您需要,您将需要在此方法中开始/结束交易。
答案 1 :(得分:1)
这取决于您创建的entityManger。
如果您在循环中编写代码,如entityManager.gettransaction.commit() 那么你可以在数据库中获得更新。
但如果你在循环之后完成它,那么它将立即提交所有内容。
您在方法事项上指定的交易类型。