openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Struberg <strub...@yahoo.de.INVALID>
Subject Re: Wrong order for delete of child when deleting parent
Date Sun, 03 Apr 2016 10:56:01 GMT
Can you please try upgrading to 2.4.1?
If you get the same issue in the newest version then it's much easier for us to reproduce.


It would also help if you could provide a sample project which at least contains the entity
constellation in question. It's much easier to discuss about such things in code than in mail
;)

txs and LieGrue,
strub


> Am 30.03.2016 um 19:33 schrieb tvogel <tvogel@msn.com>:
> 
> 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