hibernate从事务中删除错误实体

zrfyljdw  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(292)

我有一个springboot应用程序,它使用hibernate与数据库通信。应用程序的流程是:读取xml->从xml中提取实体->将实体加载到数据库。有些实体是无效的,所以我想跳过它们。我使用以下代码

public <T extends BaseEntity> long bulkInsert(Collection<T> entities) {
        long count = 0;
        try {
            for (T t : entities) {
                if (t.getId() == null) {
                    entityManager.merge(t);
                    count++;
                }
                if (count > 0 && count % 1000 == 0) {
                    log.debug("Zapisano {}. Przeslanie do bazy.", count);
                    entityManager.flush();
                    entityManager.clear();
                }
            }
            entityManager.flush();
            entityManager.clear();
        } catch (Exception e) {
            for (T ent: entities) {
                entityManager.remove(ent);
            }
            for (T ent: entities) {
                try{
                    entityManager.merge(ent);
                    entityManager.flush();
                    entityManager.clear();
                } catch (Exception ex){
                    entityManager.remove(ent);
                }
            }
        }
        return count;
    }

但我总是在第一个拦截区发现错误。现在我明白了

javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not prepare statement

在我试图合并的地方。我还再次尝试了持久化,但它生成了不同的错误分离实体,并将其传递给持久化。也许我的方法是完全错误的(我对hibernate还不熟悉)。做这件事的正确方法是什么?

suzh9iv8

suzh9iv81#

因为你的实体有持久状态。多读一些关于 Entity Manager 在冬眠中。图表示例:https://www.baeldung.com/wp-content/uploads/2016/07/2016-07-11_13-38-11-1024x551.png

相关问题