[
https://issues.apache.org/jira/browse/OPENJPA-984?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Simon Droscher updated OPENJPA-984:
-----------------------------------
Description:
A method marked with @PostLoad or @PostUpdate on an object that is the toMany
side of a bi-directional relationship does not get called when the other object
is loaded or updated.
I can confirm that this problem was introduced by the changes done in
[OPENJPA-744]. Looks like the StateManagerImpl.postLoad() method is not firing
the event due to the bidirectional field not being flagged as loaded.
An example:
@Entity
public class Order {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "order", fetch =
FetchType.EAGER)
public List<Shipment> getShipments() {
return shipments;
}
}
@Entity
public class Shipment {
@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE,
CascadeType.REFRESH })
public Order getOrder() {
return order;
}
@PostLoad
public void doSomethingAfterLoad() {
// do something
}
}
In the above example the doSomethingAfterLoad() never gets called when you load
an Order. Without the changes done in [OPENJPA-744] it does.
was:
A method marked with @PostLoad or @PostUpdate on an object that is the toMany
side of a bi-directional relationship does not get called when the other object
is loaded or updated.
I can confirm that this problem was introduced by the changes done in
[OPENJPA-744]. Looks like the StateManagerImpl.postLoad() method is not firing
the event due to the bidirectional field not being flagged as loaded.
An example:
{code}
@Entity
public class Order {
@OneToMany(cascade = CascadeType.ALL, mappedBy = "order", fetch =
FetchType.EAGER)
public List<Shipment> getShipments() {
return shipments;
}
}
@Entity
public class Shipment {
@ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE,
CascadeType.REFRESH })
public Order getOrder() {
return order;
}
@PostLoad
public void doSomethingAfterLoad() {
// do something
}
}
{code}
In the above example the doSomethingAfterLoad() never gets called when you load
an Order. Without the changes done in [OPENJPA-744] it does.
> PostLoad and PostUpdate not called for objects with a bidirectional
> relationship
> --------------------------------------------------------------------------------
>
> Key: OPENJPA-984
> URL: https://issues.apache.org/jira/browse/OPENJPA-984
> Project: OpenJPA
> Issue Type: Bug
> Components: jdbc
> Affects Versions: 1.2.1, 1.3.0
> Reporter: Simon Droscher
>
> A method marked with @PostLoad or @PostUpdate on an object that is the toMany
> side of a bi-directional relationship does not get called when the other
> object is loaded or updated.
> I can confirm that this problem was introduced by the changes done in
> [OPENJPA-744]. Looks like the StateManagerImpl.postLoad() method is not
> firing the event due to the bidirectional field not being flagged as loaded.
> An example:
> @Entity
> public class Order {
> @OneToMany(cascade = CascadeType.ALL, mappedBy = "order", fetch =
> FetchType.EAGER)
> public List<Shipment> getShipments() {
> return shipments;
> }
> }
> @Entity
> public class Shipment {
> @ManyToOne(fetch = FetchType.EAGER, cascade = { CascadeType.MERGE,
> CascadeType.REFRESH })
> public Order getOrder() {
> return order;
> }
> @PostLoad
> public void doSomethingAfterLoad() {
> // do something
> }
> }
> In the above example the doSomethingAfterLoad() never gets called when you
> load an Order. Without the changes done in [OPENJPA-744] it does.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.