[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[eclipselink-users] Problem with Master-Detail-Relationship
|
Hello,
We've got a typical master-detail-relationship like:
class A {
Set<B> details;
...
removeDetail (B b) {
boolean removed = details.remove (b);
if (removed)
b.setMaster (null);
return removed;
}
}
class B {
A master;
...
setMaster (A other) {
// if new master differs from old one we also remove
// this detail from the old master
if (master != null) {
if (!master.equals (other)) {
master.removeDetail (this);
master = other;
if (master != null)
master.addDetail (this);
}
} else if (other != null) {
master = other;
master.addDetail (this);
}
}
}
The problem occurs when a detail is removed persistently, because we first call
A.removeDetail(detailToRemove) before entityManager.remove (detailToRemove);
Doing so EclipseLink creates an update statement like
update detail_table set master_id = null where detail_id = ...;
before the delete statement for the detail record.
The update statement causes an exception, when the master_id column of the detail_table is NOT NULL.
Is this behaviour intended?
Is my code an anti-pattern?
Any hints are appreciated.
kind regards,
Michael