One to many mappings delete problem

in using Toplink 9.0.3, I have modeled a simple one to many relationships and have ran into errors on deletion.
The following is an object model that fails to delete
diagram has one to many companies ( privately held )
companies have one to many ownerships ( privately held )
ownerships have a one to one to an owner company and an owned company ( not privately held ).
In the simplest scenario, Toplink knows how to delete a diagram. It will delete an ownership, then delete the companies and then delete the diagram.
However in a diagram where a company owns two companies, Toplink fails. It attempts to delete an owned company before deleting the parent Ownership.
Note that if toplink deleted the owner company then, it would know to delete the many ownerships first.
How do we tell toplink that on deleting a company,
1. delete all the ownerships in its one to many
2. and delete all the ownerships in which the company
plays the role as an owned company.
Note that deleting an ownership should not trigger a deletion of either the owner company or the owned company.
please contact at [email protected]

Hello,
You appear to be missing a mapping in your object model.
TopLink decides its commit order, for both insertions and deletions based on the ONE TO ONE mappings in a project.
It appears that your company has no ONE TO ONE mapping to the diagram, which means that TopLink MAY decide to delete diagrams before it deletes companies.
I would suggest that you try adding a one to one mapping from company to diagram, correctly populated, and see if the problem recurs.
I hope this is of some help,
Christian

Similar Messages

  • Possible Bug? Different behaviour for List and Set one-to-many mappings on deletePersistent()

    Hi,
    I have a PC class that represents a TreeNode object (a GcGroup), which
    has a one-to-many relationship with itself to keep track of its descendants.
    For example a hierarchy of A -> B -> C, where A has B,C as descendants
    and B has C as a descendant. This is tracked by adding or removing a
    descendant with a recursive method to update a TreeNode's parent's
    descendants when a child is added or removed.
    The odd behaviour happens when I delete a child and try to remove the
    child manually from all my parent's descendant relations when I use a
    HashSet (possibly happens with any Set). In this case kodo will remove
    the relations with the following SQL statement:
    DELETE FROM TREENODE_DESCENDANTSX JDOIDX = xxxx;
    So when I do my recursive call I get a JDOException thrown stating that
    the object xxxx has already been deleted.
    When I change the relationship to an ArrayList this exception is not
    thrown and I do not get the error.
    Looking at the SQL generated they look the same:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    27106317
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    28819334
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    10817575
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:21
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    UPDATE GCGroup SET JDOLOCKX=8, child_count=0 WHERE (id = 81 AND JDOLOCKX
    = 7)
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    27106317
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    8331873
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    10817575
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:21
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GROUP__DESCENDANTSX WHERE JDOIDX = 12300
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    27106317
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    8331873
    2002-10-31 20:21:42,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    10817575
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:21
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GROUP__USERSX WHERE group_id = 12300
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    27106317
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    8331873
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    10817575
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:21
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GCGroup WHERE id = 12300
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    27106317
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    10817575
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:21
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:21:42,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    commit data store transaction
    My methods look like the following:
    public void removeChild(TreeNode t) {
         _children.remove(t);
         removeDescendant(t);
    protected void removeDescendant(TreeNode t) {
         if (_parent != null) {
              _parent.removeDescendant(t);
         _descendants.remove(t);
    The following is the stack trace from the exception when using a HashSet:
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    30836962
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    UPDATE GCGroup SET JDOLOCKX=3, child_count=0 WHERE (id = 12450 AND
    JDOLOCKX = 2)
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    28630940
    2002-10-31 20:54:10,046 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    UPDATE GCGroup SET JDOLOCKX=41 WHERE (id = 2 AND JDOLOCKX = 40)
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29663640
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,062 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GROUP__DESCENDANTSX WHERE JDOIDX = 12451
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29663640
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GROUP__USERSX WHERE group_id = 12451
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29663640
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,078 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GCGroup WHERE id = 12451
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    5057297
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GROUP__DESCENDANTSX WHERE JDOIDX = 12452
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    5057297
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GROUP__USERSX WHERE group_id = 12452
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    5057297
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,093 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    DELETE FROM GCGroup WHERE id = 12452
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    roll back data store transaction
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    4629956
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,109 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    SELECT t0.id, t0.JDOLOCKX, t0.child_count, t0.description,
    t0.global_read, t0.global_write, t0.name, t0.owner_id, t0.parent_id,
    t0.rank, t0.root_id, t0.user_count, t0.user_exists, t0.visibility FROM
    GCGroup t0 WHERE t0.id = 12451
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] [ C:
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    18799851
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; S:
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    2951648
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; T:
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    29139395
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ; D:
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    02/10/31 20:54
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo] ]
    2002-10-31 20:54:10,125 INFO
    [com.solarmetric.kodo.impl.jdbc.ee.ManagedConnectionFactoryImpl.kodo]
    SELECT t0.id, t0.JDOLOCKX, t0.child_count, t0.description,
    t0.global_read, t0.global_write, t0.name, t0.owner_id, t0.parent_id,
    t0.rank, t0.root_id, t0.user_count, t0.user_exists, t0.visibility FROM
    GCGroup t0 WHERE t0.id = 12452
    2002-10-31 20:54:10,140 INFO [STDOUT]
    com.gulfnet.common.actions.GroupAction : The exception is:
    javax.jdo.JDOException
    2002-10-31 20:54:10,140 INFO [org.jboss.web.localhost.Engine] action:
    com.gulfnet.common.actions.GroupAction : The exception is:
    javax.jdo.JDOException
    2002-10-31 20:54:10,140 INFO [STDOUT]
    com.gulfnet.common.actions.GroupAction : java.lang.NullPointerException
    2002-10-31 20:54:10,140 INFO [org.jboss.web.localhost.Engine] action:
    com.gulfnet.common.actions.GroupAction : java.lang.NullPointerException
    2002-10-31 20:54:10,140 ERROR [STDERR] javax.jdo.JDOException:
    java.lang.NullPointerException
    NestedThrowables:
    java.lang.NullPointerException
    2002-10-31 20:54:10,156 ERROR [STDERR] at
    com.solarmetric.kodo.ee.EEPersistenceManager.rollback(EEPersistenceManager.java:169)
    2002-10-31 20:54:10,156 ERROR [STDERR] at
    com.gulfnet.usermanager.UserManager.deleteGroup(UserManager.java:775)
    2002-10-31 20:54:10,156 ERROR [STDERR] at
    com.gulfnet.common.actions.GroupAction.deleteObject(GroupAction.java:146)
    2002-10-31 20:54:10,171 ERROR [STDERR] at
    com.gulfnet.common.actions.GroupAction.doAction(GroupAction.java:58)
    Kam

    Forgot to add that I am using SQLServer 2000, Jboss 3.0.3 and Kodo 2.3.4
    Kam

  • One to many mappings and combination generation

    Please help folks,
    I want to perform one to many mapping i.e a single row of data will be taken from a single table Table 'A' into Hashtable A and it has to be matched with 'n' number of rows from another table Table 'B' taken into Hashtable B. The no. of rows selected from B can be 1/2.... upto n. For performing this mapping iam using a Combination Generator Code which will Key nos. to be selected for checking whether they can be mapped and then further processing is done on these key nos. returned by the combination generator. The code for combination generator is given below.
    The issue is say if there are about 50 rows in table B then no of combinations possible are 2 ^ 50, which is just too much for the PC to handle i.e the code takes about 4-5 days of processing time. 256 MB RAM, P4. The mapping has to be done in 30 minutes!!!! Ne ideas folks????
    // Systematically generate combinations.
    import java.math.BigInteger;
    public class CombinationGenerator {
    private int[] a;
    private int n;
    private int r;
    private BigInteger numLeft;
    private BigInteger total;
    // Constructor
    public static void main(String[] args)
    String[] elements = {"a", "b", "c", "d", "e", "f", "g"};
    int[] indices;
    CombinationGenerator x = new CombinationGenerator (elements.length, 3);
    StringBuffer combination;
    while (x.hasMore ()) {
    combination = new StringBuffer ();
    indices = x.getNext ();
    for (int i = 0; i < indices.length; i++) {
    combination.append (elements[indices[i]]);
    System.out.println (combination.toString ());
    public CombinationGenerator (int n, int r) {
    if (r > n) {
    throw new IllegalArgumentException ();
    if (n < 1) {
    throw new IllegalArgumentException ();
    this.n = n;
    this.r = r;
    a = new int[r];
    BigInteger nFact = getFactorial (n);
    BigInteger rFact = getFactorial (r);
    BigInteger nminusrFact = getFactorial (n - r);
    total = nFact.divide (rFact.multiply (nminusrFact));
    reset ();
    // Reset
    public void reset () {
    for (int i = 0; i < a.length; i++) {
    a[i] = i;
    numLeft = new BigInteger (total.toString ());
    // Return number of combinations not yet generated
    public BigInteger getNumLeft () {
    return numLeft;
    // Are there more combinations?
    public boolean hasMore () {
    return numLeft.compareTo (BigInteger.ZERO) == 1;
    // Return total number of combinations
    public BigInteger getTotal () {
    return total;
    // Compute factorial
    private static BigInteger getFactorial (int n) {
    BigInteger fact = BigInteger.ONE;
    for (int i = n; i > 1; i--) {
    fact = fact.multiply (new BigInteger (Integer.toString (i)));
    return fact;
    // Generate next combination (algorithm from Rosen p. 286)
    public int[] getNext () {
    if (numLeft.equals (total)) {
    numLeft = numLeft.subtract (BigInteger.ONE);
    return a;
    int i = r - 1;
    while (a[i] == n - r + i) {
    i--;
    System.out.println("inside while");
    a[i] = a[i] + 1;
    for (int j = i + 1; j < r; j++) {
    a[j] = a[i] + j - i;
    numLeft = numLeft.subtract (BigInteger.ONE);
    return a;

    Next time you post, see the formatting guidelines [url http://forum.java.sun.com/features.jsp#Formatting]here. //--------------------------------------
    // Systematically generate combinations.
    import java.math.BigInteger;
    public class CombinationGenerator {
    private int[] a;
    private int n;
    private int r;
    private BigInteger numLeft;
    private BigInteger total;
    // Constructor
    public static void main(String[] args)
    String[] elements = {"a", "b", "c", "d", "e", "f", "g"};
    int[] indices;
    CombinationGenerator x = new CombinationGenerator (elements.length, 3);
    StringBuffer combination;
    while (x.hasMore ()) {
    combination = new StringBuffer ();
    indices = x.getNext ();
    for (int i = 0; i < indices.length; i++) {
    combination.append (elements[indices]);
    System.out.println (combination.toString ());
    public CombinationGenerator (int n, int r) {
    if (r > n) {
    throw new IllegalArgumentException ();
    if (n < 1) {
    throw new IllegalArgumentException ();
    this.n = n;
    this.r = r;
    a = new int[r];
    BigInteger nFact = getFactorial (n);
    BigInteger rFact = getFactorial (r);
    BigInteger nminusrFact = getFactorial (n - r);
    total = nFact.divide (rFact.multiply (nminusrFact));
    reset ();
    // Reset
    public void reset () {
    for (int i = 0; i < a.length; i++) {
    a = i;
    numLeft = new BigInteger (total.toString ());
    // Return number of combinations not yet generated
    public BigInteger getNumLeft () {
    return numLeft;
    // Are there more combinations?
    public boolean hasMore () {
    return numLeft.compareTo (BigInteger.ZERO) == 1;
    // Return total number of combinations
    public BigInteger getTotal () {
    return total;
    // Compute factorial
    private static BigInteger getFactorial (int n) {
    BigInteger fact = BigInteger.ONE;
    for (int i = n; i > 1; i--) {
    fact = fact.multiply (new BigInteger (Integer.toString (i)));
    return fact;
    // Generate next combination (algorithm from Rosen p. 286)
    public int[] getNext () {
    if (numLeft.equals (total)) {
    numLeft = numLeft.subtract (BigInteger.ONE);
    return a;
    int i = r - 1;
    while (a == n - r + i) {
    i--;
    System.out.println("inside while");
    a = a + 1;
    for (int j = i + 1; j < r; j++) {
    a[j] = a + j - i;
    numLeft = numLeft.subtract (BigInteger.ONE);
    return a;
    }

  • One to many data display problem.

    Post Author: testing123
    CA Forum: Crystal Reports
    Hi,
    I have a database structure like this:
    Project --> LabourTimesheet, PurchaseOrder
    Each project may have any number of LabourTimesheet values, and any number of PurchaseOrder values. They are both monetary values.
    One project could have 4 LabourTimesheet values, and 3 PurchaseOrder values. Another could have 17 LabourTimesheet values and 200 PurchaseOrder values.
    What I want to do is have individual total of the LabourTimesheet and PurchaseOrders for each Project. As it stands now, I can calculate a running total (for each Project) of PurchaseOrders fine. However, the LabourTimesheet values repeat every time a new PurchaseOrder is generated.
    We end up, typically with something like this:
    Because the LabourTimesheets repeat I cannot set up a standard running total to calculate on each individual timesheet because the entries repeat. Does anyone know of a formula or other method I can use to stop this happening?

    Post Author: branko
    CA Forum: Crystal Reports
    Please tell us if you are using one table or you are pulling information by connecting table LABOUR TIMESHEET and TABLE PURCHASE ORDERSLinking tables correctly  will sometimes eliminate repetition. I am assuming that this is how your result should look like :  LABOR TIMESHEET   PURCHASE ORDER  67.50                                     0.00198                              93.55198                              103.15----
    463.5                        196.70   I am assuming that your purchase order has some kind unique ID.E.G.PO # is  00100 00101 00102 etcAlso you might have another connection between PO and LAbour timesheet E.G. Project ID is 1,2,3 If  you describe your database more , you will get your answer faster.

  • Controlling Delete Order with One-To-Many

    I have a class that has six 1-M mappings. All of them have a 1-1 back reference. I would like to control the order of deletion to ensure that one of the child collections is always deleted last.
    It was suggested to me to use an after-load method to call addConstraintDependencies on the parent descriptor to control the order. This method is being called (before login) but it did not change the order. I added the after-load to the parent descriptor, adding the constraint dependency of the class I want deleted last.
    I also tried using "multi-table info" (in addition to the regular one-to-many mappings) but that seems to cause the valueHolder to retrieve the items from the table twice, giving me a list with "doubles" of every item.
    What can I do to control the order of the deletes of the children?
    Thanks,
    Allen

    Hi Don,
    This is with reference to your comments on the following oracel forum query "http://forums.oracle.com/forums/thread.jspa?messageID=508819&#55728;&#57235;" regarding 1:M mapping insertion problem.(Same one)
    Actually I also have the same kind of scenario but the data in not getting inserted to the detail table. It always gives ORA-1400 error as it is unable to populate the foreign key of parent in child table.
    Can you suggest if I am missing something.
    Your quick response will be appreciated.
    Message was edited by:
    user466708

  • Aggregate one-to-many relationship problem

    Hello,
    After migrating from Toplink 9i I've stumbled across a problem with our aggregate objects.
    Toplink Workbench reports no errors and generates a nice XML but in runtime I get this error whenever a aggregate function is used.
    [TopLink fin]: 2008.02.13 03:18:11.552--ServerSession(12626425)--Connection(29948747)--Thread(Thread[main,5,main])--SELECT DISTINCT t0.NPL_PACK_ID, t0.NPL_ID FROM NPL_MEDPROD t3, FASS_MEDPROD t2, NPL_MEDPROD t1, NPL_PACKAGE t0 WHERE (((t0.NPL_ID = t1._Presentation->NPL_ID_IN_REFERENCE_NPL_PACKAGE_NPL_MEDPROD_Test) AND ((t1.NPL_ID = t2.NPL_ID) AND (t3.NPL_ID LIKE '19750613000031%'))) AND (t3.NPL_ID = t2.NPL_ID))
    Caused by: Undantag [TOPLINK-4002] (Oracle TopLink - 10g Release 3 (10.1.3.1.0) (Build 061004)): oracle.toplink.exceptions.DatabaseException
    Internt undantag: java.sql.SQLException: ORA-00911: invalid character
    Felkod: 911
    I belive that problem resides in this clause :
    t1._Presentation->NPL_ID_IN_REFERENCE_NPL_PACKAGE_NPL_MEDPROD_Test
    I've created a small test project with just a couple of classes but the same aggregate problem occurs which has let me to believe the problem does not come from the migrating process which was my first guess. If anyone could help me discover what I am doing wrong it would be very appreciated. Below is my test project output.
    <?xml version="1.0" encoding="UTF-8"?>
    <toplink:object-persistence version="Oracle TopLink - 10g Release 3 (10.1.3.1.0) (Build 061004)" xmlns:opm="http://xmlns.oracle.com/ias/xsds/opm" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:toplink="http://xmlns.oracle.com/ias/xsds/toplink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <opm:name>test</opm:name>
    <opm:class-mapping-descriptors>
    <opm:class-mapping-descriptor xsi:type="toplink:relational-class-mapping-descriptor">
    <opm:class>se.lif.fass.fassdata.impl.FASSMedProdImpl</opm:class>
    <opm:alias>FASSMedProdImpl</opm:alias>
    <opm:primary-key>
    <opm:field table="FASS_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:primary-key>
    <opm:events xsi:type="toplink:event-policy"/>
    <opm:querying xsi:type="toplink:query-policy"/>
    <opm:attribute-mappings>
    <opm:attribute-mapping xsi:type="toplink:one-to-one-mapping">
    <opm:attribute-name>_Medprod</opm:attribute-name>
    <opm:reference-class>schemas_npl.instance.impl.MedprodTypeImpl</opm:reference-class>
    <opm:private-owned>true</opm:private-owned>
    <opm:foreign-key>
    <opm:field-reference>
    <opm:source-field table="FASS_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    <opm:target-field table="NPL_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:field-reference>
    </opm:foreign-key>
    <opm:foreign-key-fields>
    <opm:field table="FASS_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:foreign-key-fields>
    <toplink:batch-reading>true</toplink:batch-reading>
    <toplink:selection-query xsi:type="toplink:read-object-query"/>
    </opm:attribute-mapping>
    <opm:attribute-mapping xsi:type="toplink:direct-mapping">
    <opm:attribute-name>id</opm:attribute-name>
    <opm:read-only>true</opm:read-only>
    <opm:field table="FASS_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:attribute-mapping>
    </opm:attribute-mappings>
    <toplink:descriptor-type>independent</toplink:descriptor-type>
    <toplink:instantiation/>
    <toplink:copying xsi:type="toplink:instantiation-copy-policy"/>
    <toplink:change-policy xsi:type="toplink:deferred-detection-change-policy"/>
    <toplink:tables>
    <toplink:table name="FASS_MEDPROD"/>
    </toplink:tables>
    </opm:class-mapping-descriptor>
    <opm:class-mapping-descriptor xsi:type="toplink:relational-class-mapping-descriptor">
    <opm:class>schemas_npl.instance.impl.MedprodTypeImpl</opm:class>
    <opm:alias>MedprodTypeImpl</opm:alias>
    <opm:primary-key>
    <opm:field table="NPL_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:primary-key>
    <opm:events xsi:type="toplink:event-policy"/>
    <opm:querying xsi:type="toplink:query-policy"/>
    <opm:attribute-mappings>
    <opm:attribute-mapping xsi:type="toplink:aggregate-object-mapping">
    <opm:attribute-name>_Medprodpack</opm:attribute-name>
    <toplink:reference-class>schemas_npl.instance.impl.MedprodTypeImpl$MedprodpackTypeImpl</toplink:reference-class>
    <toplink:allow-null>false</toplink:allow-null>
    <toplink:field-translations>
    <toplink:field-translation>
    <toplink:source-field name="_Presentation->NPL_ID_IN_REFERENCE_NPL_PACKAGE_NPL_MEDPROD_Test" xsi:type="opm:column"/>
    <toplink:target-field table="NPL_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </toplink:field-translation>
    </toplink:field-translations>
    </opm:attribute-mapping>
    <opm:attribute-mapping xsi:type="toplink:direct-mapping">
    <opm:attribute-name>_Nplid</opm:attribute-name>
    <opm:field table="NPL_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:attribute-mapping>
    <opm:attribute-mapping xsi:type="toplink:direct-mapping">
    <opm:attribute-name>id</opm:attribute-name>
    <opm:read-only>true</opm:read-only>
    <opm:field table="NPL_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:attribute-mapping>
    </opm:attribute-mappings>
    <toplink:descriptor-type>independent</toplink:descriptor-type>
    <toplink:instantiation/>
    <toplink:copying xsi:type="toplink:instantiation-copy-policy"/>
    <toplink:change-policy xsi:type="toplink:deferred-detection-change-policy"/>
    <toplink:tables>
    <toplink:table name="NPL_MEDPROD"/>
    </toplink:tables>
    </opm:class-mapping-descriptor>
    <opm:class-mapping-descriptor xsi:type="toplink:relational-class-mapping-descriptor">
    <opm:class>schemas_npl.instance.impl.MedprodTypeImpl$MedprodpackTypeImpl</opm:class>
    <opm:alias>MedprodTypeImpl$MedprodpackTypeImpl</opm:alias>
    <opm:events xsi:type="toplink:event-policy"/>
    <opm:querying xsi:type="toplink:query-policy"/>
    <opm:attribute-mappings>
    <opm:attribute-mapping xsi:type="toplink:one-to-many-mapping">
    <opm:attribute-name>_Presentation</opm:attribute-name>
    <opm:reference-class>schemas_npl.instance.impl.MedprodTypeImpl$MedprodpackTypeImpl$PresentationTypeImpl</opm:reference-class>
    <opm:private-owned>true</opm:private-owned>
    <opm:target-foreign-key>
    <opm:field-reference>
    <opm:source-field table="NPL_PACKAGE" name="NPL_ID" xsi:type="opm:column"/>
    <opm:target-field name="_Presentation->NPL_ID_IN_REFERENCE_NPL_PACKAGE_NPL_MEDPROD_Test" xsi:type="opm:column"/>
    </opm:field-reference>
    </opm:target-foreign-key>
    <toplink:batch-reading>true</toplink:batch-reading>
    <toplink:container xsi:type="toplink:list-container-policy">
    <toplink:collection-type>com.sun.xml.bind.util.ListImpl</toplink:collection-type>
    </toplink:container>
    <toplink:selection-query xsi:type="toplink:read-all-query">
    <toplink:container xsi:type="toplink:list-container-policy">
    <toplink:collection-type>com.sun.xml.bind.util.ListImpl</toplink:collection-type>
    </toplink:container>
    </toplink:selection-query>
    </opm:attribute-mapping>
    </opm:attribute-mappings>
    <toplink:descriptor-type>aggregate</toplink:descriptor-type>
    <toplink:instantiation/>
    <toplink:copying xsi:type="toplink:instantiation-copy-policy"/>
    <toplink:change-policy xsi:type="toplink:deferred-detection-change-policy"/>
    </opm:class-mapping-descriptor>
    <opm:class-mapping-descriptor xsi:type="toplink:relational-class-mapping-descriptor">
    <opm:class>schemas_npl.instance.impl.MedprodTypeImpl$MedprodpackTypeImpl$PresentationTypeImpl</opm:class>
    <opm:alias>MedprodTypeImpl$MedprodpackTypeImpl$PresentationTypeImpl</opm:alias>
    <opm:primary-key>
    <opm:field table="NPL_PACKAGE" name="NPL_PACK_ID" xsi:type="opm:column"/>
    </opm:primary-key>
    <opm:events xsi:type="toplink:event-policy"/>
    <opm:querying xsi:type="toplink:query-policy"/>
    <opm:attribute-mappings>
    <opm:attribute-mapping xsi:type="toplink:direct-mapping">
    <opm:attribute-name>_Nplpackid</opm:attribute-name>
    <opm:field table="NPL_PACKAGE" name="NPL_PACK_ID" xsi:type="opm:column"/>
    </opm:attribute-mapping>
    <opm:attribute-mapping xsi:type="toplink:one-to-one-mapping">
    <opm:attribute-name>backref</opm:attribute-name>
    <opm:reference-class>schemas_npl.instance.impl.MedprodTypeImpl</opm:reference-class>
    <opm:foreign-key>
    <opm:field-reference>
    <opm:source-field table="NPL_PACKAGE" name="NPL_ID" xsi:type="opm:column"/>
    <opm:target-field table="NPL_MEDPROD" name="NPL_ID" xsi:type="opm:column"/>
    </opm:field-reference>
    </opm:foreign-key>
    <opm:foreign-key-fields>
    <opm:field table="NPL_PACKAGE" name="NPL_ID" xsi:type="opm:column"/>
    </opm:foreign-key-fields>
    <toplink:indirection xsi:type="toplink:value-holder-indirection-policy"/>
    <toplink:selection-query xsi:type="toplink:read-object-query"/>
    </opm:attribute-mapping>
    <opm:attribute-mapping xsi:type="toplink:direct-mapping">
    <opm:attribute-name>id</opm:attribute-name>
    <opm:read-only>true</opm:read-only>
    <opm:field table="NPL_PACKAGE" name="NPL_ID" xsi:type="opm:column"/>
    </opm:attribute-mapping>
    </opm:attribute-mappings>
    <toplink:descriptor-type>independent</toplink:descriptor-type>
    <toplink:instantiation/>
    <toplink:copying xsi:type="toplink:instantiation-copy-policy"/>
    <toplink:change-policy xsi:type="toplink:deferred-detection-change-policy"/>
    <toplink:tables>
    <toplink:table name="NPL_PACKAGE"/>
    </toplink:tables>
    </opm:class-mapping-descriptor>
    </opm:class-mapping-descriptors>
    <toplink:login xsi:type="toplink:database-login">
    <toplink:platform-class>oracle.toplink.platform.database.oracle.Oracle8Platform</toplink:platform-class>
    <toplink:user-name>fassadmin</toplink:user-name>
    <toplink:password>3CC3773C96563CA0C89634305615359CD62D1A19DF561D1E</toplink:password>
    <toplink:driver-class>oracle.jdbc.driver.OracleDriver</toplink:driver-class>
    <toplink:connection-url>jdbc:oracle:oci8:@DB2</toplink:connection-url>
    </toplink:login>
    </toplink:object-persistence>
    Regards
    /Jonas

    The issue is in the one-to-many mapping in the aggregate,
    <br>
    <opm:attribute-mapping xsi:type="toplink:one-to-many-mapping">
      <opm:attribute-name>_Presentation</opm:attribute-name>
      <opm:reference-class>schemas_npl.instance.impl.MedprodTypeImpl$MedprodpackTypeImpl$PresentationTypeImpl</opm:reference-class>
      <opm:private-owned>true</opm:private-owned>
      <opm:target-foreign-key>
        <opm:field-reference>
          <opm:source-field table="NPL_PACKAGE" name="NPL_ID" xsi:type="opm:column"/>
          <opm:target-field name="_Presentation->NPL_ID_IN_REFERENCE_NPL_PACKAGE_NPL_MEDPROD_Test" xsi:type="opm:column"/>
        </opm:field-reference>
      </opm:target-foreign-key>There is an issue with the Mapping Workbench and shared aggregates with one-to-many mappings and translating the foreign key fields. Did this work before, I would be surprized if it did, unless the 2.5 Builder was used?
    Anyway the easiest workaround is to either edit the XML and change the NPL_ID_IN_REFERENCE_NPL_PACKAGE_NPL_MEDPROD_Test column name to what it should be, or define a descriptor amendment method to define the one-to-many mapping with the correct field names.
    -- James : EclipseLink

  • One to Many Again :(

    The problem that we currently have is to do with One-To-Many mappings. 1:1 and M:M work perfectly well. Only 1:M relations are not working properly the way we anticipate it to work.
    Consider the example:
    PurchaseOrder and LineItems. Each purchase order might have more than one LineItem and so PurchaseOrder class will have a list of LineItems and we map this list using 1:M mapping within the workbench.
    Toplink Behavior:
    In case of insert the foreign key in the child record is null and so it fails to insert.
    And some forums suggested that we have a backward relation. ie the child object should contain a parent object, which my opinion is very wrong because we are not really achieving 1:M relation, rather we are doing many 1:1 relations. Moreover having a parent object in the child and each parent having a list to me sounds like it might end-up in a circular reference ??
    Has anybody had any luck setting up 1:M properly without backward relation? Please share your experiences and workarounds.
    Regards,
    Murali

    Murali,
    Our FAQ covers this briefly listing alternatives:
    http://www.oracle.com/technology/products/ias/toplink/technical/tl10g_faq.htm#OneToOneBack
    I strongly recommend mapping all FKs as 1:1. In an ORM system these are actually the governing relationships and the 1:M are the optional associations. Mapping the 1:1 back-ref will create a much needed circular reference, which is easily managed in the model.
    The other options provided are also completely supported but will not provide the flexibility and performance of the 1:M + 1:1 solution.
    This approach is in line with all leading ORM solutions and is what you will find in the upcoming EJB3 specification as well.
    Cheers,
    Doug

  • One-Sided One-to-Many Mapping

    Hi,
    the manual says: "You can, however, have one-sided one-to-many mappings in
    which the back-reference only exists in the database, and is not
    represented by any Java field. The mapping tool never creates a one-sided
    one-to-many relation like this; you can only create it by writing the
    mapping data yourself, and then only on an existing schema that supports
    it."
    I don't understand the meaning of the phrase "only on an existing schema
    that supports it". Does that mean it's not supported for all databases
    (which are supported)? And what does it mean "on an existing schema"?
    thanks
    Reto

    Whoops. Got it backwards.
    Should be
    q.declareParameters ("Article article");
    q.setFilter ("articles.contains (article)");
    Collection results = (Collection) q.execute (article);
    Stephen Kim wrote:
    If this is a one to many, Article can just return its owning magazine
    field.
    Otherwise you can issue a query usch as:
    Query q = pm.newQuery (Magazine.class);
    q.declareParameters ("magazine");
    q.setFilter ("articles.contains (magazine)");
    Collection results = (Collection) q.execute (magazine);
    bamboo wrote:
    Following is the example, the question is how can I get the magazine
    instance if I have an Article instance? Thanks.
    Java class:
    public class Magazine
    private Set articles;
    ... class content ...
    Schema:
    <table name="MAGAZINE">
    <column name="JDOID" type="bigint"/>
    <pk column="JDOID"/>
    ... columns for magazine fields ...
    </table>
    <table name="ARTICLE">
    ... primary key columns ...
    <column name="MAG_ID" type="bigint"/>
    <fk to-table="MAGAZINE">
    <join column="MAG_ID" to-column="JDOID"/>
    </fk>
    ... columns for article fields ...
    </table>
    JDO metadata:
    <class name="Magazine">
    <field name="articles">
    <collection element-type="Article"/>
    </field>
    ... rest of field metadata ...
    </class>
    Mapping information using the mapping XML format:
    <class name="Magazine">
    ... class mapping ...
    ... indicator mappings ...
    <field name="articles">
    <jdbc-field-map type="one-many" table="ARTICLE"
    ref-column.JDOID="MAG_ID"/>
    </field>
    ... rest of field mappings ...
    </class>
    Steve Kim
    [email protected]
    SolarMetric Inc.
    http://www.solarmetric.com

  • I have many duplicates of songs in my library, how do I consolidate them into one copy each without deleting each one individually?

    I hae many duplicates of songs in my library how do i consolidate them into one copy each without deleting each one individually?

    yea... i faced this problem many a time... have run apple sceipts to delete these songs....
    you download these scripts from the link below.... jus follow thw instructions... and you are free from duplicates
    http://dougscripts.com/apps/dupinapp.php
    hope this helps..!

  • One-to-Many CMR problem

    I am trying to get Container Managed Relationships working with Oracle Application Server. I am sure that the problem it quite obvious to anyone who has got this working before, but after carefully following numerous examples, I still cant get them to work. I have various issues including the application server blocking when it calls the getB() method in "A" to populate the items from table "B", even though the generated SQL looks okay e.g., "select B_PK from B where (b_fk = 1)".
    I would be extremely grateful if you could point out my (hopefully obvious) mistake as I wrestled with it for the past couple of weeks.
    Any ideas?
    Cheers,
    Jonathan
    I have two tables A and B; A has a one-to-many relationship with B:
    Table A:
         A_PK          (primary key)
         A_NAME
    Table B:
         B_PK          (primary key)
         B_NAME
         B_FK          (foreign key to table A)
    My ejb-jar.xml file is:
    <ejb-jar>
    <enterprise-beans>
    <entity>
    <description>Entity Bean ( CMP )</description>
    <display-name>A</display-name>
    <ejb-name>A</ejb-name>
    <home>mypackage1.AHome</home>
    <remote>mypackage1.A</remote>
    <local-home>mypackage1.ALocalHome</local-home>
    <local>mypackage1.ALocal</local>
    <ejb-class>mypackage1.impl.ABean</ejb-class>
    <persistence-type>Container</persistence-type>
    <prim-key-class>java.lang.Long</prim-key-class>
    <reentrant>False</reentrant>
    <cmp-version>2.x</cmp-version>
    <abstract-schema-name>A</abstract-schema-name>
    <cmp-field><field-name>a_pk</field-name></cmp-field>
    <cmp-field><field-name>a_name</field-name></cmp-field>
    <primkey-field>a_pk</primkey-field>
    </entity>
    <entity>
    <description>Entity Bean ( CMP )</description>
    <display-name>B</display-name>
    <ejb-name>B</ejb-name>
    <home>mypackage1.BHome</home>
    <remote>mypackage1.B</remote>
    <local-home>mypackage1.BLocalHome</local-home>
    <local>mypackage1.BLocal</local>
    <ejb-class>mypackage1.impl.BBean</ejb-class>
    <persistence-type>Container</persistence-type>
    <prim-key-class>java.lang.Long</prim-key-class>
    <reentrant>False</reentrant>
    <cmp-version>2.x</cmp-version>
    <abstract-schema-name>B</abstract-schema-name>
    <cmp-field><field-name>b_pk</field-name></cmp-field>
    <cmp-field><field-name>b_name</field-name></cmp-field>
    <cmp-field><field-name>b_fk</field-name></cmp-field>
    <primkey-field>b_pk</primkey-field>
    </entity>
    </enterprise-beans>
    <relationships>
    <ejb-relation>
    <ejb-relation-name>A-B</ejb-relation-name>
    <ejb-relationship-role>
    <multiplicity>One</multiplicity>
    <cascade-delete/>
    <relationship-role-source>
    <ejb-name>A</ejb-name>
    </relationship-role-source>
    <cmr-field>
    <cmr-field-name>b</cmr-field-name>
    <cmr-field-type>java.util.Collection</cmr-field-type>
    </cmr-field>
    </ejb-relationship-role>
    <ejb-relationship-role>
    <multiplicity>Many</multiplicity>
    <relationship-role-source>
    <ejb-name>B</ejb-name>
    </relationship-role-source>
    </ejb-relationship-role>
    </ejb-relation>
    </relationships>
    </ejb-jar>
    And my orion-ejb-jar.xml file is:
    <?xml version = '1.0' encoding = 'windows-1252'?>
    <!DOCTYPE orion-ejb-jar PUBLIC "-//Evermind//DTD Enterprise JavaBeans 1.1 runtime//EN" "http://xmlns.oracle.com/ias/dtds/orion-ejb-jar.dtd">
    <orion-ejb-jar>
    <enterprise-beans>
    <entity-deployment name="A" copy-by-value="false" data-source="jdbc/Connection1DS" exclusive-write-access="false" table="a">
    <primkey-mapping>
    <cmp-field-mapping name="a_pk" persistence-name="a_pk"
    persistence-type="int(11)"/>
    </primkey-mapping>
    <cmp-field-mapping name="a_pk" persistence-name="a_pk"
    persistence-type="int(11)"/>
    <cmp-field-mapping name="a_name" persistence-name="a_name"
    persistence-type="varchar(100)"/>
    <cmp-field-mapping name="b">
    <collection-mapping table="B">
    <primkey-mapping>
    <cmp-field-mapping name="b_fk" persistence-name="B_FK"/>
    </primkey-mapping>
    <value-mapping type="mypackage1.BLocal">
    <cmp-field-mapping>
    <entity-ref home="B">
    <cmp-field-mapping name="b_pk" persistence-name="B_PK"/>
    </entity-ref>
    </cmp-field-mapping>
    </value-mapping>
    </collection-mapping>
    </cmp-field-mapping>
    </entity-deployment>
    <entity-deployment name="B" copy-by-value="false" data-source="jdbc/Connection1DS" exclusive-write-access="false" table="b">
    <primkey-mapping>
    <cmp-field-mapping name="b_pk" persistence-name="b_pk"
    persistence-type="int(11)"/>
    </primkey-mapping>
    <cmp-field-mapping name="b_pk"
    persistence-name="b_pk" persistence-type="int(11)"/>
    <cmp-field-mapping name="b_fk" persistence-name="b_fk"
    persistence-type="int(11)"/>
    </entity-deployment>
    </enterprise-beans>
    <assembly-descriptor>
    <default-method-access>
    <security-role-mapping impliesAll="true" name="&lt;default-ejb-caller-role>"/>
    </default-method-access>
    </assembly-descriptor>
    </orion-ejb-jar>

    Ok, I found out something strange. If I do the addPet operation twice in the client the new relationship is created, too.
    p = home.create("Violetta");
    p.addNewPet("Jenny");
    p = home.create("Frank");
    p.addPet("Jenny");
    p.addPet("Jenny");
    May this be a timing problem? Or is there a command I could execute to ensure all data manipulation is populated to the DB. (Like close() in JDBC)
    TIA
    Frank

  • Persistence and transactions: One-to-many consistency problem

    Hi,
    we have the following problem: We have two persistent classes A and B that are connected via a one-to-many (1:n) relationship. Now we
    1. get an object "a" of class A and a number of related objects of class B from the persistence manager. Then we
    3. delete the relationship between "a" and one object of class B. Then (without commit)
    4. the GUI requests to show all related Bs for our given "a" and:
    5. the query returns also the "deleted" object.
    All these steps are performed within the same (object oriented) top level transaction.
    The reason for this seems clear to us: The removal of the B has not been persisted in the DB. However, we don't really know how to deal with it...
    Any suggestion is welcome.
    Christoph

    Hi Chris,
    it is unclear to me if you are re-reading the database after you delete the 'b' item.
    Anyway, the way persistent objects work is that changes are not written to the database until the SAP LUW ends with a COMMIT WORK.
    Cheers
    Graham Robbo

  • One-to-many graph problem

    Hi,
    I am haviing a crystal report problem. The problem relates to a one-to-many relationship involving two tables.
    I have a similar setup to the following:
    I have 2 database tables: table1 & table2
    table1 consists of 3 fields:
    {id#}, {yes/no},{up/down}
    table2 consists of 2 fields:
    {id#},
    the field can contain any of the following values: 'open', 'closed', 'final', 'complete'.
    The problem is that there exist many states to one id#.
    I have a bar graph in my report that displays a bar for the count of the{yes/no} field and a bar for the count of the {up/down} field. I want also a bar for the count of when the field = 'final'.
    What happens when I write a formula for the field in the second table and place it in the 'show values' section of the chart expert, is the count displayed in each bar on the graph increases significantly. I am assuming this is because there are multiple records in table 2 for each record in table 1.
    What I want to happen is that the graph displays bar 1 and bar 2 correctly and then when I put in the formula for the third bar, it simply displays that bar with the count for when the field = 'final'. I dont want it to affect the whole garph.
    Has anyone got any suggestions on how I can do this?
    I have tried messing around with the distinct records setting in crystal and also by writing an sql query specifying DISTINCT keyword instead of using the select expert, but to no avail.
    Please please can someone help me with this issue.
    Thank you.
    J

    You can add a 1-1 query key through the code API in a descriptor amendment method. You could also define a selection criteria on the 1-m mapping to filter the type=2.
    Example: (see Foundation Library manual 8-17)
    OneToOneQueryKey queryKey = new OneToOneQueryKey();
    queryKey.setName("organization");
    queryKey.setReferenceClass(Organization.class);
    ExpressionBuilder builder = new ExpressionBuilder();
    queryKey.setJoinCriteria(builder.getField("ORGANIZATION.ORG_ID").equal(builder.getParameter("RELATIONSHIP.PARENT_ID").and(builder.getParamater("RELATIONSHIP.RELATIONSHIP_TYPE").equal(2)));
    relationDescriptor.addQueryKey(queryKey);
    Example: (of 1-m mapping with selection criteria)
    OneToManyMapping mapping = new OneToManyMapping();
    mapping.setReferenceClass(Relation.class);
    mapping.setTargetForeignKey("RELATION.PARENT_ID");
    ExpressionBuilder builder = new ExpressionBuilder();
    mapping.setSelectionCriteria(builder.getField("RELATIONSHIP.PARENT_ID").equal(builder.getParameter("ORGANIZATION.ORG_ID").and(builder.getField("RELATIONSHIP.RELATIONSHIP_TYPE").equal(2)));
    orgDescriptor.addMapping(mapping);

  • JPA One-To-Many Parent-Child Mapping Problem

    I am trying to map an existing legacy Oracle schema that involves a base class table and two subclass tables that are related by a one-to-many relationship which is of a parent-child nature.
    The following exception is generated. Can anybody provide a suggestion to fix the problem?
    Exception [EclipseLink-45] (Eclipse Persistence Services - 2.0.0.v20091127-r5931): org.eclipse.persistence.exceptions.DescriptorException
    Exception Description: Missing mapping for field [BASE_OBJECT.SAMPLE_ID].
    Descriptor: RelationalDescriptor(domain.example.entity.Sample --> [DatabaseTable(BASE_OBJECT), DatabaseTable(SAMPLE)])
    The schema is as follows:
    CREATE TABLE BASE_OBJECT(
    "BASE_OBJECT_ID" INTEGER PRIMARY KEY NOT NULL,
    "NAME" VARCHAR2(128) NOT NULL,
    "DESCRIPTION" CLOB NOT NULL,
    "BASE_OBJECT_KIND" NUMBER(5,0) NOT NULL );
    CREATE TABLE SAMPLE(
    "SAMPLE_ID" INTEGER PRIMARY KEY NOT NULL,
    "SAMPLE_TEXT" VARCHAR2(128) NOT NULL )
    CREATE TABLE SAMPLE_ITEM(
    "SAMPLE_ITEM_ID" INTEGER PRIMARY KEY NOT NULL,
    "SAMPLE_ID" INTEGER NOT NULL,
    "QUANTITY" INTEGER NOT NULL )
    The entities are related as follows:
    SAMPLE.SAMPLE_ID -> BASE_OBJECT.BASE_OBJECT_ID - The PKs that are used to join the sample to the base class
    SAMPLE_ITEM.SAMPLE_ITEM_ID -> BASE_OBJECT.BASE_OBJECT_ID - The PKs that are used to join the sample item to the base class
    SAMPLE_ITEM.SAMPLE_ID -> SAMPLE.SAMPLE_ID - The FK that is used to join the sample item to the sample class as a child of the parent.
    SAMPLE is one to many SAMPLE_ITEM
    The entity classes are as follows:
    @Entity
    @Table( name = "BASE_OBJECT" )
    @Inheritance( strategy = InheritanceType.JOINED )
    @DiscriminatorColumn( name = "BASE_KIND", discriminatorType = DiscriminatorType.INTEGER )
    @DiscriminatorValue( "1" )
    public class BaseObject
    extends SoaEntity
    @Id
    @GeneratedValue( strategy = GenerationType.SEQUENCE, generator = "BaseObjectIdSeqGen" )
    @SequenceGenerator( name = "BaseObjectIdSeqGen", sequenceName = "BASE_OBJECT_PK_SEQ", allocationSize = 1 )
    @Column( name = "BASE_ID" )
    private long baseObjectId = 0;
    @Entity
    @Table( name = "SAMPLE" )
    @PrimaryKeyJoinColumn( name = "SAMPLE_ID" )
    @AttributeOverride(name="baseObjectId", column=@Column(name="SAMPLE_ID"))
    @DiscriminatorValue( "2" )
    public class Sample
    extends BaseObject
    @OneToMany( cascade = CascadeType.ALL )
    @JoinColumn(name="SAMPLE_ID",referencedColumnName="SAMPLE_ID")
    private List<SampleItem> sampleItem = new LinkedList<SampleItem>();
    @Entity
    @Table( name = "SAMPLE_ITEM" )
    @PrimaryKeyJoinColumn( name = "SAMPLE_ITEM_ID" )
    @AttributeOverride(name="baseObjectId", column=@Column(name="SAMPLE_ITEM_ID"))
    @DiscriminatorValue( "3" )
    public class SampleItem
    extends BaseObject
    @Basic( optional = false )
    @Column( name = "SAMPLE_ID" )
    private long sampleId = 0;
    Edited by: Chris-R on Mar 2, 2010 4:45 PM

    Thanks for the thoroughness. There was a mistake in moving the code over for the forum. The field names are correct throughout the original source code.
    BASE_OBJECT_ID is used throughout.
    I suspect the problem lies in the one-to-many sampleItem(s) relationship that is based upon the subclassed item class. (The relationship is actually "sampleItems" in the real code and somehow got changed in the move over.)
    The problem may lie in the mapping of the attribute override in the child class to the referencing of the item class from the parent side of the relationship in the Sample class.
    I further suspect this may be specific to Eclipselink based upon other postings I've seen on the web that have similar problems...
    Any thoughts?
    Edited by: Chris-R on Mar 3, 2010 9:56 AM

  • Problem inserting one-to-many collection

    Hi,
    I've been trying to get an object (CMDMessage) that has a one-to-many collection (CMDMessageXREF)
    inserted into the database, but no matter what I try I can't seem to get the collection to grab the
    foreign key value of 'msg_id' to populate that field in the CMDMessageXREF object, I keep getting a nul value.
    From reading the forums, it seems the best way to get this value is to setup a back reference one-to-one mapping from the collection to the parent
    object, but this doesn't seem to be working from me.
    I've attached the pertinent client code as well as the pertinent information from the descriptors and would
    appreciate any help on this.
    Thanks,
    Mark
    Client code:
    CMDMessage note = new CMDMessage();
    note.setAuthorId(new Double(58402));
    note.setMsgSubject("Sequence test2");
    java.util.ArrayList xrefCollection = new java.util.ArrayList();
    CMDMessageXREF xref = new CMDMessageXREF();
    xref.setRecipientId(new Double(58400));
    xref.setRecipientType("org");
    xrefCollection.add(xref);
    note.setCmdMessageXrefCollection(xrefCollection);
    // runs transaction     invoking UnitOfWork to insert objects
    TransactionEngine.insert(note);
    Descriptors:
    public Descriptor buildCMDMessageDescriptor() {
         Descriptor descriptor = new Descriptor();
         descriptor.setJavaClass(CMDMessage.class);
         descriptor.addTableName("CMD_MESSAGE");
         descriptor.addPrimaryKeyFieldName("CMD_MESSAGE.MSG_ID");
         // Descriptor properties.
         descriptor.useNoIdentityMap();
         descriptor.setIdentityMapSize(1000);
         descriptor.useRemoteNoIdentityMap();
         descriptor.setRemoteIdentityMapSize(1000);
         descriptor.setSequenceNumberFieldName("CMD_MESSAGE.MSG_ID");
         descriptor.setSequenceNumberName("CMD_MSG_ID_SEQUENCE");
         descriptor.alwaysConformResultsInUnitOfWork();
         descriptor.onlyRefreshCacheIfNewerVersion();
         descriptor.setAlias("CMDMessage");
         // Query manager.
         descriptor.useChangedFieldsLocking();
         descriptor.getQueryManager().checkDatabaseForDoesExist();
         //Named Queries
         // Event manager.
         // Mappings.
         DirectToFieldMapping msgIdMapping = new DirectToFieldMapping();
         msgIdMapping.setAttributeName("msgId");
         msgIdMapping.setGetMethodName("getMsgId");
         msgIdMapping.setSetMethodName("setMsgId");
         msgIdMapping.setFieldName("CMD_MESSAGE.MSG_ID");
         descriptor.addMapping(msgIdMapping);
         DirectToFieldMapping msgSubjectMapping = new DirectToFieldMapping();
         msgSubjectMapping.setAttributeName("msgSubject");
         msgSubjectMapping.setGetMethodName("getMsgSubject");
         msgSubjectMapping.setSetMethodName("setMsgSubject");
         msgSubjectMapping.setFieldName("CMD_MESSAGE.MSG_SUBJECT");
         descriptor.addMapping(msgSubjectMapping);
         OneToManyMapping cmdMessageXrefCollectionMapping = new OneToManyMapping();
         cmdMessageXrefCollectionMapping.setAttributeName("cmdMessageXrefCollection");
         cmdMessageXrefCollectionMapping.setGetMethodName("getCmdMessageXrefCollection");
         cmdMessageXrefCollectionMapping.setSetMethodName("setCmdMessageXrefCollection");
         cmdMessageXrefCollectionMapping.setReferenceClass(CMDMessageXREF.class);
         cmdMessageXrefCollectionMapping.useTransparentCollection();
         cmdMessageXrefCollectionMapping.useCollectionClass(oracle.toplink.indirection.IndirectList.class);
         cmdMessageXrefCollectionMapping.readOnly();
         cmdMessageXrefCollectionMapping.addTargetForeignKeyFieldName("CMD_MESSAGE_XREF.MSG_ID", "CMD_MESSAGE.MSG_ID");
         descriptor.addMapping(cmdMessageXrefCollectionMapping);
         return descriptor;
    public Descriptor buildCMDMessageXREFDescriptor() {
         Descriptor descriptor = new Descriptor();
         descriptor.setJavaClass(CMDMessageXREF.class);
         descriptor.addTableName("CMD_MESSAGE_XREF");
         descriptor.addPrimaryKeyFieldName("CMD_MESSAGE_XREF.ID");
         // Descriptor properties.
         descriptor.useNoIdentityMap();
         descriptor.setIdentityMapSize(1000);
         descriptor.useRemoteNoIdentityMap();
         descriptor.setRemoteIdentityMapSize(1000);
         descriptor.setSequenceNumberFieldName("CMD_MESSAGE_XREF.ID");
         descriptor.setSequenceNumberName("CMD_MSG_XREF_ID_SEQ");
         descriptor.alwaysConformResultsInUnitOfWork();
         descriptor.onlyRefreshCacheIfNewerVersion();
         descriptor.setAlias("CMDMessageXREF");
         // Query manager.
         descriptor.useChangedFieldsLocking();
         descriptor.getQueryManager().checkDatabaseForDoesExist();
         //Named Queries
         // Event manager.
         // Mappings.
         DirectToFieldMapping idMapping = new DirectToFieldMapping();
         idMapping.setAttributeName("id");
         idMapping.setGetMethodName("getId");
         idMapping.setSetMethodName("setId");
         idMapping.setFieldName("CMD_MESSAGE_XREF.ID");
         descriptor.addMapping(idMapping);
         DirectToFieldMapping msgIdMapping = new DirectToFieldMapping();
         msgIdMapping.setAttributeName("msgId");
         msgIdMapping.setGetMethodName("getMsgId");
         msgIdMapping.setSetMethodName("setMsgId");
         msgIdMapping.setFieldName("CMD_MESSAGE_XREF.MSG_ID");
         descriptor.addMapping(msgIdMapping);
         DirectToFieldMapping recipientIdMapping = new DirectToFieldMapping();
         recipientIdMapping.setAttributeName("recipientId");
         recipientIdMapping.setGetMethodName("getRecipientId");
         recipientIdMapping.setSetMethodName("setRecipientId");
         recipientIdMapping.setFieldName("CMD_MESSAGE_XREF.RECIPIENT_ID");
         descriptor.addMapping(recipientIdMapping);
         OneToOneMapping cmdMessageInfoMapping = new OneToOneMapping();
         cmdMessageInfoMapping.setAttributeName("cmdMessageInfo");
         cmdMessageInfoMapping.setGetMethodName("getCmdMessageInfoHolder");
         cmdMessageInfoMapping.setSetMethodName("setCmdMessageInfoHolder");
         cmdMessageInfoMapping.setReferenceClass(CMDMessage.class);
         cmdMessageInfoMapping.useBasicIndirection();
         cmdMessageInfoMapping.readOnly();
         cmdMessageInfoMapping.addTargetForeignKeyFieldName("CMD_MESSAGE.MSG_ID", "CMD_MESSAGE_XREF.MSG_ID");
         descriptor.addMapping(cmdMessageInfoMapping);
         return descriptor;
    }

    Chris,
    Ok, I've tried both approaches
    1. using direct field mapping, getting rid of the one to one mapping on the CMDMessageXREF object, and adding this line xref.setMsgId( note.getMsgId()
    and
    2. removing the readOnly line for the mappings and setting the CMDMessage in the CMDMessageXREF object as shown below in bold.
    but still am getting the same error. Could this be because the MSG_ID field in the database is NOT NULL? Otherwise, I am not seeing what else I can do differently to set this up. Below is the updated relevant code and descriptor showing the second approach I used.
    Thanks for the help,
    Mark
    Client code
    CMDMessage note = new CMDMessage();
    note.setAuthorId(new Double(58402));
    note.setMsgSubject("Sequence test2");
    java.util.ArrayList xrefCollection = new java.util.ArrayList();
    CMDMessageXREF xref = new CMDMessageXREF();
    xref.setRecipientId(new Double(58400));
    // added to set value to valueHolder
    xref.setCmdMessageInfo(note);
    xrefCollection.add(xref);
    note.setCmdMessageXrefCollection(xrefCollection);
    TransactionEngine.insert(note);
    Descriptors
    public Descriptor buildCMDMessageDescriptor() {
         Descriptor descriptor = new Descriptor();
         descriptor.setJavaClass(CMDMessage.class);
         descriptor.addTableName("CMD_MESSAGE");
         descriptor.addPrimaryKeyFieldName("CMD_MESSAGE.MSG_ID");
         // Descriptor properties.
         descriptor.useNoIdentityMap();
         descriptor.setIdentityMapSize(1000);
         descriptor.useRemoteNoIdentityMap();
         descriptor.setRemoteIdentityMapSize(1000);
         descriptor.setSequenceNumberFieldName("CMD_MESSAGE.MSG_ID");
         descriptor.setSequenceNumberName("CMD_MSG_ID_SEQUENCE");
         descriptor.alwaysConformResultsInUnitOfWork();
         descriptor.onlyRefreshCacheIfNewerVersion();
         descriptor.setAlias("CMDMessage");
         // Query manager.
         descriptor.useChangedFieldsLocking();
         descriptor.getQueryManager().checkDatabaseForDoesExist();
         //Named Queries
         // Event manager.
         // Mappings.
         DirectToFieldMapping msgIdMapping = new DirectToFieldMapping();
         msgIdMapping.setAttributeName("msgId");
         msgIdMapping.setGetMethodName("getMsgId");
         msgIdMapping.setSetMethodName("setMsgId");
         msgIdMapping.setFieldName("CMD_MESSAGE.MSG_ID");
         descriptor.addMapping(msgIdMapping);
         OneToManyMapping cmdMessageXrefCollectionMapping = new OneToManyMapping();
         cmdMessageXrefCollectionMapping.setAttributeName("cmdMessageXrefCollection");
         cmdMessageXrefCollectionMapping.setGetMethodName("getCmdMessageXrefCollection");
         cmdMessageXrefCollectionMapping.setSetMethodName("setCmdMessageXrefCollection");
         cmdMessageXrefCollectionMapping.setReferenceClass(CMDMessageXREF.class);
         cmdMessageXrefCollectionMapping.useTransparentCollection();
         cmdMessageXrefCollectionMapping.useCollectionClass(oracle.toplink.indirection.IndirectList.class);
         cmdMessageXrefCollectionMapping.addTargetForeignKeyFieldName("CMD_MESSAGE_XREF.MSG_ID", "CMD_MESSAGE.MSG_ID");
         descriptor.addMapping(cmdMessageXrefCollectionMapping);
         return descriptor;
    public Descriptor buildCMDMessageXREFDescriptor() {
         Descriptor descriptor = new Descriptor();
         descriptor.setJavaClass(CMDMessageXREF.class);
         descriptor.addTableName("CMD_MESSAGE_XREF");
         descriptor.addPrimaryKeyFieldName("CMD_MESSAGE_XREF.ID");
         // Descriptor properties.
         descriptor.useNoIdentityMap();
         descriptor.setIdentityMapSize(1000);
         descriptor.useRemoteNoIdentityMap();
         descriptor.setRemoteIdentityMapSize(1000);
         descriptor.setSequenceNumberFieldName("CMD_MESSAGE_XREF.ID");
         descriptor.setSequenceNumberName("CMD_MSG_XREF_ID_SEQ");
         descriptor.alwaysConformResultsInUnitOfWork();
         descriptor.onlyRefreshCacheIfNewerVersion();
         descriptor.setAlias("CMDMessageXREF");
         // Query manager.
         descriptor.useChangedFieldsLocking();
         descriptor.getQueryManager().checkDatabaseForDoesExist();
         //Named Queries
         // Event manager.
         // Mappings.
         DirectToFieldMapping idMapping = new DirectToFieldMapping();
         idMapping.setAttributeName("id");
         idMapping.setGetMethodName("getId");
         idMapping.setSetMethodName("setId");
         idMapping.setFieldName("CMD_MESSAGE_XREF.ID");
         descriptor.addMapping(idMapping);
         DirectToFieldMapping recipientIdMapping = new DirectToFieldMapping();
         recipientIdMapping.setAttributeName("recipientId");
         recipientIdMapping.setGetMethodName("getRecipientId");
         recipientIdMapping.setSetMethodName("setRecipientId");
         recipientIdMapping.setFieldName("CMD_MESSAGE_XREF.RECIPIENT_ID");
         descriptor.addMapping(recipientIdMapping);
         OneToOneMapping cmdMessageInfoMapping = new OneToOneMapping();
         cmdMessageInfoMapping.setAttributeName("cmdMessageInfo");
         cmdMessageInfoMapping.setGetMethodName("getCmdMessageInfoHolder");
         cmdMessageInfoMapping.setSetMethodName("setCmdMessageInfoHolder");
         cmdMessageInfoMapping.setReferenceClass(CMDMessage.class);
         cmdMessageInfoMapping.useBasicIndirection();
         cmdMessageInfoMapping.addTargetForeignKeyFieldName("CMD_MESSAGE.MSG_ID", "CMD_MESSAGE_XREF.MSG_ID");
    descriptor.addMapping(cmdMessageInfoMapping);
         return descriptor;
    }

  • One to many mapping problem

    In my JPA project I'm using these three classes:
    Cart.java:
    package com.spinnaker.pedja;
    import java.sql.Date;
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.HashSet;
    import java.util.Set;
    import javax.persistence.*;
    @Entity(name = "Cart")
    @Table(schema = "shop")
    public class Cart {
         @Id
         @Column(name = "cart_id")
         private int Cart_id;
         @Column(name = "cart_date")
         private Date date;
          @OneToMany(mappedBy = "cartItemPK", targetEntity = CartItemPK.class)
          private Set cartitemCollection = new HashSet(0);
         @ManyToOne
         @JoinColumn(name = "customer_id")
         private Customer customer;
         public Customer getCustomer() {
              return customer;
         public void setCustomer(Customer customer) {
              this.customer = customer;
         public Cart() {
          public Set getCartitemCollection() {
          return cartitemCollection;
          public void setCartitemCollection(Set cartitemCollection) {
          this.cartitemCollection = cartitemCollection;
         public int getCart_id() {
              return Cart_id;
         public void setCart_id(int cart_id) {
              this.Cart_id = cart_id;
         public Date getDate() {
              return date;
         public void setDate(Date date) {
              this.date = date;
    }, CartItem.java:
    package com.spinnaker.pedja;
    import java.io.Serializable;
    import javax.persistence.*;
    @Entity
    @Table(schema = "shop")
    public class CartItem implements Serializable {
         @EmbeddedId
         @ManyToOne
    //     @JoinColumn(name = "cart_id")
         CartItemPK cartItemPK;
         @Column(name = "quantity")
         private int quantity;
         @Column(name = "unit_price")
         private double unit_price;
    //     @JoinColumn(name = "cart_id")
    //     private Cart cart;
    //      public Cart getCart() {
    //      return cart;
    //      public void setCart(Cart cart) {
    //      this.cart = cart;
         public CartItem() {
         public CartItemPK getCartItemPK() {
              return cartItemPK;
         public void setCartItemPK(CartItemPK cartItemPK) {
              this.cartItemPK = cartItemPK;
         public int getQuantity() {
              return quantity;
         public void setQuantity(int quantity) {
              this.quantity = quantity;
         public double getUnit_price() {
              return unit_price;
         public void setUnit_price(double unit_price) {
              this.unit_price = unit_price;
    }and CartItemPK.java:
    package com.spinnaker.pedja;
    import java.io.Serializable;
    import javax.persistence.*;
    @Table(schema="shop")
    @Embeddable
    public class CartItemPK implements Serializable{
         @Column(name="item_id",nullable=false)
         private int itemId;
    //     @ManyToOne
    //     @JoinColumn(name = "cart_id")
    //     private Cart cart;
         @Column(name="cart_id",nullable=false)
         private int cartId;
         public int getItemId() {
              return itemId;
         public void setItemId(int itemId) {
              this.itemId = itemId;
         public int getCartId() {
              return cartId;
         public void setCartId(int cartId) {
              this.cartId = cartId;
    I'm having problem with mapping one to many relationship between Cart and CartItem.I had to introduce CartItemPK class because CartItem has composite primary key.Help please!!!

    In my test class I'm using this code:
    Cart cart=em.find(Cart.class, 33);
              Set cartItems=cart.getCartitemCollection();
              for (Iterator iterator = cartItems.iterator(); iterator.hasNext();) {
                   CartItem cart_item = (CartItem) iterator.next();
                   System.out.println(cart_item.getCartItemPK().getCartId());
              }and this error happens:
    Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.spinnaker.pedja.Cart.cartitemCollection[com.spinnaker.pedja.CartItemPK]
         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:247)
         at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:120)
         at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:159)
         at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:95)
         at com.spinnaker.pedja.test.Test.main(Test.java:30)
    Caused by: org.hibernate.AnnotationException: Use of @OneToMany or @ManyToMany targeting an unmapped class: com.spinnaker.pedja.Cart.cartitemCollection[com.spinnaker.pedja.CartItemPK]
         at org.hibernate.cfg.annotations.CollectionBinder.bindManyToManySecondPass(CollectionBinder.java:979)
         at org.hibernate.cfg.annotations.CollectionBinder.bindStarToManySecondPass(CollectionBinder.java:530)
         at org.hibernate.cfg.annotations.CollectionBinder$1.secondPass(CollectionBinder.java:471)
         at org.hibernate.cfg.CollectionSecondPass.doSecondPass(CollectionSecondPass.java:43)
         at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1136)
         at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:296)
         at org.hibernate.cfg.Configuration.buildMappings(Configuration.java:1121)
         at org.hibernate.ejb.Ejb3Configuration.buildMappings(Ejb3Configuration.java:1211)
         at org.hibernate.ejb.EventListenerConfigurator.configure(EventListenerConfigurator.java:154)
         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:847)
         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:178)
         at org.hibernate.ejb.Ejb3Configuration.configure(Ejb3Configuration.java:235)
         ... 4 more
    I didn't find any example on the internet about my particular case.In the database,Cart and CartItem are conected via cart_id field.But in my JPA project,cart_id field is a part of a composite key CarItemPK.

Maybe you are looking for

  • Error 2000 - The server is not compatible with this deployment client

    I'm getting an error trying to deploy a composite. It works for everyone else on the team, and our configurations are the same (as far as we can tell). We've compared JDev version info. Any idea what I can try? Thank you. [12:57:48 PM] ---- Deploymen

  • Oracle SOA Suite 11.1.1.6

    Hello, I installed the soa suite with all the step, i followed the installation guide but when I startup the server, the soa-infra application is down, so I can't find the soa_server. I can see the next log in the AdminServer.log. How can I startup t

  • Error 500 and Java Error after BOBJ 4.0 installation

    Hi, I have installed BOBJ 4.0 and I have also installed SP 1 and SP 2 with FP up to 10. Now when I tried to launch CMC or BI Launch Pad I get following error. Following error started appearing after unsuccessful single sign on and SP updates. http st

  • Where is the PairingWizard in iMac

    "PairingWizard can't be opened because it is from an unidentified developer."  "Your security preferences allow installation of only apps from the Mac App Store and identified developers." How do I disable?

  • Ftp server down?

    Hi, It seems that the FTP server is down, because I couldn't download anything. Anyone got a mirror site? ftp://ftp.sap.com/pub/sdn/devkits/netweaver/abap/SAPNetWeaver04SneakPreviewABAP.rar Thanx, Roy