OpenJPA删除父项时删除子项的错误顺序
发布时间:2020-12-15 00:36:07 所属栏目:Java 来源:网络整理
导读:OpenJPA 2.3.x的删除顺序发生在错误的顺序,我无法弄清楚原因. 鉴于这些JPA映射 // grandparent@Entity@Table(name = "three_phase_motor_input")public class ThreePhaseMotorInput implements IThreePhaseMotorInput,Serializable { @Id @GeneratedValue(st
OpenJPA 2.3.x的删除顺序发生在错误的顺序,我无法弄清楚原因.
鉴于这些JPA映射 // grandparent @Entity @Table(name = "three_phase_motor_input") public class ThreePhaseMotorInput implements IThreePhaseMotorInput,Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Version private Integer version; @OneToOne(orphanRemoval = true,cascade = CascadeType.ALL,optional = true,targetEntity = UnapprovedThreePhaseMotor.class) @JoinColumn(name = "unapproved_id") private IThreePhaseMotor unapprovedMotor; // parent @Entity @Table(name = "unapproved_three_phase_motor") public class UnapprovedThreePhaseMotor extends ThreePhaseMotor { @OneToMany(orphanRemoval = true,fetch = FetchType.LAZY,targetEntity = UnapprovedThreePhaseWire.class) @JoinColumn(name = "motor_id",referencedColumnName = "id",nullable = false) @OrderColumn(name = "idx") private List<IThreePhaseWire> wires; // child - Abstract @Entity @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) @Access(AccessType.FIELD) public abstract class ThreePhaseWire implements IThreePhaseWire,Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; // child concrete @Entity @Table(name = "unapproved_three_phase_wire") public class UnapprovedThreePhaseWire extends ThreePhaseWire { 将祖父节中的unapprovedMotor设置为null时,日志文件中的SQL语句顺序 572353115 UPDATE three_phase_motor_input SET status = ?,version = ?,approved_id = ?,unapproved_id = ? WHERE id = ? AND version = ? [params=(int) 1,(int) 8,(null) null,(long) 896,(int) 7] 1683522521 DELETE FROM unapproved_three_phase_motor WHERE id = ? AND version = ? [params=(long) 209938,(int) 1] 446470297 DELETE FROM unapproved_three_phase_wire WHERE id = ? [params=(long) 1394] 这会导致外键约束错误,因为在执行父删除语句时子项仍然存在. 解决方法
我从来没有使用过OpenJPA,但在我看来,问题可以通过级联安排来解决,你应该检查一下.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |