我正面临着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()时,我以一个数据库行结束,idArticle为null,详细信息等于DELETED_TAG常量,数量等于0.但是行仍然存在,尽管em.remove.
我试图在删除之前添加一个line.setHeader(null),但是我得到一个ConstraintViolationException,因为header字段不能为null.
显然我做错了什么,但我无法弄清楚是什么.
有实体代码:
public class Header implements Serializable {
[...]
@OneToMany(cascade = CascadeType.ALL, mappedBy = "header")
private Collection 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,该行重新出现.
有没有办法发现原因?显然,有一个生成插入的实体,但我正在从标题中删除该行,那么我该怎么做才能找出触发插入的内容?