
| Key: |
OPENJPA-313
|
| Type: |
Bug
|
| Status: |
Resolved
|
| Resolution: |
Fixed
|
| Priority: |
Major
|
| Assignee: |
Unassigned
|
| Reporter: |
Catalina Wei
|
| Votes: |
0
|
| Watchers: |
0
|
|
If you were logged in you would be able to see more operations.
|
|
|
| Resolution Date: |
16/Aug/07 02:49 PM
|
|
We have an object inheritance hierarchy as follows.
FixedAnnuity extends Annuity
EquityAnnuity extends Annuity
Then we have following code:
List<IAnnuity> annuities = getServerAdapter().findHolderAnnuities(holder);
from which we expect to have a list of "Annuity" (could be Annuity, FixedAnnuity or
EquityAnnuity) from following code
EntityManager em = null;
try{
em = factory.createEntityManager();
Query query = em.createNamedQuery("GetHolderAnnuities");
query.setParameter("holderId", holder.getId());
return (List<IAnnuity>) query.getResultList();
}
Here is the query
<named-query name="GetHolderAnnuities">
<query>SELECT a FROM Annuity AS a WHERE a.annuityHolderId = :holderId</query>
</named-query>
In the end, the list returned only the first object with the correct Object, the
rest of the objects all casted into the basic type "Annuity"
e.g. we have following code:
EntityManager em = null;
try{
em = factory.createEntityManager();
Query query = em.createNamedQuery("GetHolderAnnuities");
query.setParameter("holderId", holder.getId());
return (List<IAnnuity>) query.getResultList();
}
FixedAnnuity fixed1 = new FixedAnnuity();
fixed1.setHolder(holder);
EquityAnnuity equity1 = new EquityAnnuity();
equity1.setHolder(holder);
FixedAnnuity fixed1 = new FixedAnnuity();
fixed2.setHolder(holder);
EquityAnnuity equity2 = new EquityAnnuity();
equity2.setHolder(holder);
List<IAnnuity> annuities = getServerAdapter().findHolderAnnuities(holder);
Only annuities.get(0) returns the correct object as FixedAnnuity, the other 3
objects returned all returned as Annuity
|
|
Description
|
We have an object inheritance hierarchy as follows.
FixedAnnuity extends Annuity
EquityAnnuity extends Annuity
Then we have following code:
List<IAnnuity> annuities = getServerAdapter().findHolderAnnuities(holder);
from which we expect to have a list of "Annuity" (could be Annuity, FixedAnnuity or
EquityAnnuity) from following code
EntityManager em = null;
try{
em = factory.createEntityManager();
Query query = em.createNamedQuery("GetHolderAnnuities");
query.setParameter("holderId", holder.getId());
return (List<IAnnuity>) query.getResultList();
}
Here is the query
<named-query name="GetHolderAnnuities">
<query>SELECT a FROM Annuity AS a WHERE a.annuityHolderId = :holderId</query>
</named-query>
In the end, the list returned only the first object with the correct Object, the
rest of the objects all casted into the basic type "Annuity"
e.g. we have following code:
EntityManager em = null;
try{
em = factory.createEntityManager();
Query query = em.createNamedQuery("GetHolderAnnuities");
query.setParameter("holderId", holder.getId());
return (List<IAnnuity>) query.getResultList();
}
FixedAnnuity fixed1 = new FixedAnnuity();
fixed1.setHolder(holder);
EquityAnnuity equity1 = new EquityAnnuity();
equity1.setHolder(holder);
FixedAnnuity fixed1 = new FixedAnnuity();
fixed2.setHolder(holder);
EquityAnnuity equity2 = new EquityAnnuity();
equity2.setHolder(holder);
List<IAnnuity> annuities = getServerAdapter().findHolderAnnuities(holder);
Only annuities.get(0) returns the correct object as FixedAnnuity, the other 3
objects returned all returned as Annuity |
Show » |
|
The testcase of the Annuity has FetchType EAGER set on both side of a OneToMany relation. An Annuity may have many Payouts.
I'd like to get some feedback from commiters before checking in this patch.
TCK verification is in process.