微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

休眠从事务中删除有问题的实体

如何解决休眠从事务中删除有问题的实体

我有SpringBoot应用程序,它使用休眠模式与数据库进行通信。申请流程是 读取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;
    }

但是我总是在第一个catch块中遇到错误。现在我明白了

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

在我尝试合并的地方。我也尝试再次进行持久化,但是它产生了不同的错误-分离实体传递给持久化。也许我的方法是完全错误的(我是休眠的新手)。正确的方法是什么?

解决方法

这是因为您的实体具有持久状态。只需了解有关Hibernate中的Entity Manager的更多信息。图表示例:https://www.baeldung.com/wp-content/uploads/2016/07/2016-07-11_13-38-11-1024x551.png

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。