openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tvogel <tvo...@msn.com>
Subject Wrong order for delete of child when deleting parent
Date Wed, 30 Mar 2016 17:33:26 GMT
The order of deletes for OpenJPA 2.3.x are happening in the wrong order and I
can't figure out why.

Given these JPA mappings

	// 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, cascade = CascadeType.ALL, fetch =
FetchType.LAZY, targetEntity = UnapprovedThreePhaseWire.class)
		@JoinColumn(name = "motor_id", referencedColumnName = "id", nullable =
false)
		@OrderColumn(name = "idx")
		private List<IThreePhaseWire> wires;


	// child - Abstract
	@MappedSuperclass
	@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 {


Order of SQL statements in log file when setting unapprovedMotor in
grandparent to null

	 572353115 UPDATE three_phase_motor_input SET status = ?, version = ?,
approved_id = ?, unapproved_id = ? WHERE id = ? AND version = ?
[params=(int) 1, (int) 8, (null) null, (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]

This causes a foreign key constraint error since the child still exists when
the parent delete statement is executed.
	 



--
View this message in context: http://openjpa.208410.n2.nabble.com/Wrong-order-for-delete-of-child-when-deleting-parent-tp7589053.html
Sent from the OpenJPA Users mailing list archive at Nabble.com.

Mime
View raw message