java - 读取 Apache POI 文件并通过 JPA 进行持久化,但实体的持久化直到方法结束时才会发生

标签 java apache jpa ejb-3.0 apache-poi

您好,我正在尝试跟踪我的 Apache POI 读取 Excel 文件并导入数据库的情况。我将导入进度(%进度、时间等)保存到数据库中的单独表中,以便我可以查询数据导入进度。

我的问题是实体管理器仅保留“进度”状态一次,即在将数据加载到数据库的方法结束时。

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())) 尝试将进度状态保存到单独的表中,但这只会发生一次(最后)

有人可以帮我吗?

谢谢

最佳答案

这取决于事务的范围,你使用注释来定义这个吗?如果是,这就解释了为什么一切都在最后完成。

如果您需要的话,您将需要在此方法中开始/结束事务。

关于java - 读取 Apache POI 文件并通过 JPA 进行持久化,但实体的持久化直到方法结束时才会发生,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980327/

相关文章:

Java protected 修饰符可在具有相同包名的另一个包中访问

php - 需要 .htaccess 帮助 : nonexistent urls 301 redirecting to 404, 而不是直接给出 404

mysql - 如何在 thymeleaf springboot 中填充选择元素?

java - 无法从 Spring Boot 连接到 MySQL 数据库

java - 在 Netbeans 中设置 4 个空格选项卡?

java - HermesJMS 无法连接到 TibcoEMS 服务器

Java - 保存 Internet Radio 流

java - 如何在 Java 中使用 JavaScript?

php - 没有来自 docker 容器的 php-fpm 错误日志

java - OpenJPA 在使用 JPQL(选择查询)重新获取实体时不会刷新实体