JPA不会删除数据库行

更多产品

我遇到了JPA的删除问题,这是我的代码:

public deleteLine(int idLine) {
  Line line = em.find(Line.class,idLine);
  Header header = line.getHeader();
  this.deleteLine(header,line);
}

public boolean deleteLine(Header header, Line line) {
    try {
      line.setIdArticle(null);
      line.setDetail(DELETED_TAG);
      line.setQuantity(0.0f);
      em.merge(line);
      header.getLineCollection().remove(line);
      em.remove(line);
      em.flush();
    }
    catch (Exception ex) {
      LOG.log(Level.SEVERE, null, ex);
    }
  return true;
}

当我打电话deleteLine(),我与一个数据库行的结尾idArticlenull,细节等于DELETED_TAG常数,quantity等于0但是,尽管,该行仍然存在em.remove

我尝试line.setHeader(null)在删除之前添加,但是我得到了,ConstraintViolationException因为标头字段不能为null

显然我做错了,但是我无法弄清楚是什么。

有实体代码:

public class Header implements Serializable {
  [...]
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "header")
  private Collection<Line> lineCollection;
  [...]
}

public class Line implements Serializable {
  [...]
  @JoinColumn(name = "header", referencedColumnName = "header")
  @ManyToOne(optional = false)
  private Header header;
  [...]
}

我已经完成了通过JPQL(DELETE FROM Linea WHERE idLinea=?删除行的测试,并且可以有效地删除行。但是随后,当JPA进行提交时,由于JPA的完成,该行再次出现INSERT

有办法发现原因吗?显然,有一个实体会生成插入内容,但是我要删除标题中的行,那么我该怎么做才能找出触发插入内容的原因呢?

更多产品

我发现问题出在哪里:当用户删除一行时,我正在这样做

  • 呼叫deleteLine
  • 做一些计算并用结果更新标题

由于jpa的工作原理,对标头字段的修改迫使jpa跳过删除子项(由于全部级联)或重新插入它,因为实际上该实体仍然存在并休眠“漫游”并重建父子树。

对于面临相同问题的人们,如果要删除孩子并在删除后更新父母,我找到的正确方法是:

  • 从父集合中移除子对象
  • 更新标题
  • 删除孩子

对我来说,按照这种精确的顺序进行操作可以解决问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JPA不会删除数据库行

来自分类Dev

删除数据库中的行

来自分类Dev

删除数据库中的行

来自分类Dev

Laravel destroy 不会从数据库中删除数据

来自分类Dev

Eloquent destroy() 不会删除数据库中的行 - Laravel 5.6

来自分类Dev

删除数据库

来自分类Dev

使用href从数据库中删除数据行

来自分类Dev

防止删除数据库中的特定行

来自分类Dev

如何通过Ajax删除数据库中的行

来自分类Dev

使用Ajax删除数据库行

来自分类Dev

如何通过Ajax删除数据库中的行

来自分类Dev

删除数据库(JSP)上的一行

来自分类Dev

从sqlite数据库删除数据

来自分类Dev

删除数据库后,SQL Server不会删除所有数据库文件吗?

来自分类Dev

如何从Firebase删除数据库?

来自分类常见问题

在phpMyAdmin中删除数据库

来自分类Dev

删除数据库范围的凭据

来自分类Dev

SSIS删除数据库错误

来自分类Dev

通过PgAdminIII删除数据库

来自分类Dev

SQL Powershell删除数据库

来自分类Dev

删除数据库中的图像

来自分类Dev

删除数据库记录MVC

来自分类Dev

删除数据库android sqlite

来自分类Dev

删除数据库,PostgreSQL

来自分类Dev

删除数据库时出错?

来自分类Dev

无法删除数据库或创建数据库

来自分类Dev

如果需要迁移,领域不会自动删除数据库

来自分类Dev

服务生成器不会删除数据库中的表

来自分类Dev

卸载Android应用程序时不会删除数据库