Expressions for one-to-many

Trying to get a query to return all users that have a particular role. The roles are stored in a Vector populated by the Role object in the User object.
I only get an exception because the SQL end with "...WHERE" so no condition is added to the statement...
Where am i going wrong...?
///////BITS OF CODE/////////
ReadAllQuery query = new ReadAllQuery();
query.setReferenceClass(User.class);
//Role selection...
ExpressionBuilder userExp = new ExpressionBuilder();
userExp.anyOf("roles").get("rceRoleId").equal(role.getRceRoleId());
query.setSelectionCriteria(userExp);
///// SQL THAT I WANT TO ACHIVE /////
SELECT uri.uri_username
FROM tdcr_user_roles urs, tdcr_user_info uri, tdcr_role_code tdc
WHERE ( (uri.uri_userid = urs.urs_uri_userid)
AND (tdc.rce_role_id = urs.urs_rce_role_id)
AND (tdc.rce_role_id = 1)
Thanks!

Jan,
You are passing the ExpressionBuilder into the selection criteria and not the expression you created. The ExpressionBuilder is basically a factory for expressions.
Try:
///////BITS OF CODE/////////
ReadAllQuery query = new ReadAllQuery();
query.setReferenceClass(User.class);
//Role selection...
ExpressionBuilder eb = new ExpressionBuilder();
Expression userExp = eb.anyOf("roles").get("rceRoleId").equal(role.getRceRoleId());
query.setSelectionCriteria(userExp);
Doug

Similar Messages

  • How can I export a list of events for one of many calendars - e.g. "sailing" to use in Excel

    How can I export a list of events for one of many calendars - e.g. "sailing" to use in Excel?

    See this thread here
    Display number of emails by sender

  • Help with multi-table mapping for one-to-many object inheritance

    Hi,
    I have posted on here before regarding this (Toplink mapping for one-to-many object inheritance but I am still having problems mapping my object model to my schema.
    Object model
    The Person and Organisation objects contain base information and have the primary keys person_id and organisation_id. It is important that there is no duplication of person and organisation records, no matter how many times they are saved in different roles.
    There are two types of licenceholder in the problem domain, and the ILicenceHolder interface defines information and methods that are common to both. The PersonalLicenceHolder object represents one of these types of licenceholder, and is always a person, so this class extends Person and implements ILicenceHolder.
    The additional information and methods that are required by the second type of licenceholder are defined in the interface IPremisesLicenceHolder, which extends ILicenceHolder. Premises licence holders can either be people or organisations, so I have two objects to represent these - PremisesLicenceHolderPerson which implements IPremisesLicenceHolder and extends Person, and PremisesLicenceHolderOrganisation which implements IPremisesLicenceHolder and extends Organisation.
    The model is further complicated by the fact that any single Person may be both a PersonalLicenceHolder and a PremisesLicenceHolderPerson, and may be so several times over. In this case, the same basic Person information needs to be linked to several different sets of licenceholder information. In the same way, any single Organisation may be a PremisesLicenceHolderOrganisation several times over.
    Sorry this is complicated!
    Schema
    I have Person and Organisation tables containing the basic information with the primary keys person_id and organisation_id.
    I have tried to follow Donald Smith's advice and have created a Role table to record the specialised information for the different types of licence holder. I want the foreign keys in this table to be licenceholder_id and licence_id. Licenceholder_id will reference either organisation_id or person_id, and licence_id will reference the primary key of the Licence table to link the licenceholder to the licence. Because I am struggling with the mapping, I have changed licenceholder_id to person_id in an attempt to get it working with the Person object before I try the Organisation.
    Then, when a new licenceholder is added, if the person/organisation is already in the database, a new record is created in the Role table linking the existing person/organisation to the existing licence rather than duplicating the person/organisation information.
    Mapping
    I am trying to use the toplink mapping workbench to map my PremisesLicenceHolderPerson object to my schema. I have mapped all inherited attributes to superclass (Person). The primary table that the attributes are mapped to is Person, and I have used the multi-table info tab to add Roles as an additional table and map the remaining attributes to that.
    I have created the references PERSON_ROLES which maps person.person_id to roles.person_id, ROLES_PERSON which maps roles.person_id to person.person_id and ROLES_LICENCE which maps roles.licence_id to licence.licence_id.
    I think I have put in all the relationships, but I cannot get rid of the error message "The following primary key fields are unmapped: PERSON_ID".
    Please can somebody tell me how to map this properly?
    Thank you.

    I'm not positive about your mappings, but it looks like the Person object should really have a 1:M or M:M mapping to the Licenceholder table. This then means that your object model should be similar, in that Person object could have many Licenses, instead of being LicenceHolders. From the looks of it, you have it set up from the LicenceHolder perspective. What could be done instead if a LicenceHolder could have a 1:1 reference to a person data object, rather than actually be a Person. This would allow the person data to be easily shared among licences.
    LicenceHolder1 has an entry in the LicenceHolder table and Person table. LicenceHolder2 also has entries in these tables, but uses the same entry in the Person table- essentially it is the same person/person_ID. If both are new objects, TopLink would try to insert the same person object into the Person table twice. I'm not sure how you have gotten around or are planning to get around this problem.
    Since you are using inheritance, it means that LicenceHolder needs a writable mapping to the person.person_id field- most commonly done through a direct to field mapping. From the description, it looks like roles.person_id is a foreign key in the multiple table mapping, meaning it would be set based on the value in the person.person_id field, but the person.person_id isn't actually mapped in the object. Check to make sure that the ID attribute LicenceHolder is inheriting from person hasn't been remapped in the LicenceHolder descriptor to a different field.
    Best Regards,
    Chris

  • What types of containers need to be used for one-to-many relationships

    While looking at toplink examples, I noticed that synchronized containers only are being used for one-to-many relationships even though it's not required by the documentation.
    Is it required?
    Also how does merge affect it? I'm gettning concurrent modification exceptions from time to time, while using iterators for containers from these relationships.
    Does it mean that I have to use enumeration on vectors only and toplink merge isn't atomic? So there is no isolation when toplink merges the data from unit of work into identity maps?
    There is nothing about thread-safety and threading aspects of accessing containers for CollectionMapping based relationships. Please advise.

    Non synchronized containers can be used but may require some extra code to handle concurrent access. If you are accessing the objects from the shared cache (not cloned in a UnitOfWork) then you will need to isolate your iteration within a synchronized block, synchronized on the collection itself, or handle the ConncurrentModificationException if they happen rarely.
    Because these are shared instances of these collections other threads may be writing to them while they are being read from.
    --Gordon

  • Toplink mapping for one-to-many object inheritance

    Hi
    I currently have a Person object, extended by two specialist classes, PremisesLicenceHolder and PersonalLicenceHolder. I have mapped this in Toplink and it works fine saving a person into the specialist tables using the primary key person_id.
    However, a single Person may be extended any number of times by either one or both of the two specialist types. So, a Person may be a PremisesLicenceHolder many times over for different premises and licences, and also a PersonalLicenceHolder several times over.
    Is it possible to map this object model in Toplink avoiding duplicate person_id primary keys in the specialist tables?
    Thanks

    Hi,
    I am happy that my object model fits the problem domain. The Person and Organisation objects contain base information and have the primary keys person_id and organisation_id. It is important that there is no duplication of person and organisation records, no matter how many times they are saved in different roles.
    There are two types of licenceholder in the problem domain, and the ILicenceHolder interface defines information and methods that are common to both. The PersonalLicenceHolder object represents one of these types of licenceholder, and is always a person, so this class extends Person and implements ILicenceHolder.
    The additional information and methods that are required by the second type of licenceholder are defined in the interface IPremisesLicenceHolder, which extends ILicenceHolder. Premises licence holders can either be people or organisations, so I have two objects to represent these - PremisesLicenceHolderPerson which implements IPremisesLicenceHolder and extends Person, and PremisesLicenceHolderOrganisation which implements IPremisesLicenceHolder and extends Organisation.
    The model is further complicated by the fact that any single Person may be both a PersonalLicenceHolder and a PremisesLicenceHolderPerson, and may be so several times over. In this case, the same basic Person information needs to be linked to several different sets of licenceholder information. In the same way, any single Organisation may be a PremisesLicenceHolderOrganisation several times over.
    Sorry this is complicated!
    My initial idea for the schemas is to have Person and Organisation tables containing the basic information with the primary keys person_id and organisation_id. The Person table would have a one-to-many relationship with both the PersonalLicenceHolder table (pk: personalLicenceHolder_id, fk: person_id), and the PremisesLicenceHolderPerson table (pk: premisesLicenceHolderPerson_id, fk: person_id). There would also be a one-to-many relationship between the Organisation table and the PremisesLicenceHolderOrganisation table (pk: premisesLicenceHolderOrganisation_id, fk: organisation_id).
    I am flexible as to the design of my schema though, as I am happy to adopt any that will facilitate the Toplink Mapping.
    Thanks for your help with this.

  • Weblogic-cmp-rdbms-jar.xml for One-To-Many unidirectional relationship

    hi,
    I am trying to create a simple cmp One-To-Many unidirectional relationship and deploy the same in weblogic. Can someone help me with the weblogic-cmp-rdbms-jar.xml. Am attaching the weblogic-cmp-rdbms-jar. xml tht i am using as also the corresponding ejb-jar.xml. Pls. note tht i want a unidirectional relationship here. one i am tryng However i get this error:
    Error while reading 'META-INF/weblogic-cmp-rdbms-jar.xml'. The error was: Role 'Supplier supplies Products' of relationship 'Product Supplier' contains an invalid key-column value of 'productID'. The key-column must specify a primary key column in the related bean. However, there is no primary key column named 'productID' defined in the related bean 'ProductEJB' or else 'productID' is not being recognized due to case mismatch. My weblogic-cmp-rdbms-jar
    <?xml version="1.0"?>
    <!DOCTYPE weblogic-rdbms-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB RDBMS Persistence//EN' 'http://www.bea.com/servers/wls810/dtd/weblogic-rdbms-jar.dtd'>
    <weblogic-rdbms-jar>
    <weblogic-rdbms-bean>
         <ejb-name>SupplierEJB</ejb-name>
         <data-source-name>RJDataSource</data-source-name>
         <table-map>
               <table-name>AA_Supplier</table-name>
               <field-map>
                     <cmp-field>supplierID</cmp-field>
                     <dbms-column>supplierID</dbms-column>
               </field-map>
               <field-map>
                    <cmp-field>name</cmp-field>
                    <dbms-column>name</dbms-column>
               </field-map>
         </table-map>
    </weblogic-rdbms-bean>
    <weblogic-rdbms-bean>
           <ejb-name>ProductEJB</ejb-name>
           <data-source-name>RJDataSource</data-source-name>
           <table-map>
                 <table-name>AA_Product</table-name>
                 <field-map>
                      <cmp-field>productID</cmp-field>
                      <dbms-column>productid</dbms-column>
                 </field-map>
                 <field-map>
                      <cmp-field>description</cmp-field>
                      <dbms-column>description</dbms-column>
                 </field-map>
                 <field-map>
                      <cmp-field>basePrice</cmp-field>
                      <dbms-column>baseprice</dbms-column>
                 </field-map>
                <field-map>
                      <cmp-field>name</cmp-field>
                      <dbms-column>name</dbms-column>
                 </field-map>
                 <field-map>
                     <cmp-field>supplierID</cmp-field>
                       <dbms-column>supplierID</dbms-column>
                 </field-map>
            </table-map>
    </weblogic-rdbms-bean>
    <weblogic-rdbms-relation>
         <relation-name>Product Supplier</relation-name>
         <weblogic-relationship-role>
              <relationship-role-name>Supplier supplies Products</relationship-role-name>
              <relationship-role-map>
                   <column-map>
                        <foreign-key-column>supplierID</foreign-key-column>
                        <key-column>productID</key-column>
                   </column-map>
              </relationship-role-map>
         </weblogic-relationship-role>
         <weblogic-relationship-role>
              <relationship-role-name>Product supplied by Supplier</relationship-role-name>
              <relationship-role-map>
              <column-map>
                   <foreign-key-column>products</foreign-key-column>
                   <key-column>supplierID</key-column>
              </column-map>
              </relationship-role-map>
         </weblogic-relationship-role>
    </weblogic-rdbms-relation>
    </weblogic-rdbms-jar> My ejb-jar.xml
    <?xml version="1.0"?>
    <!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
    <ejb-jar>
         <enterprise-beans>
         <entity>
              <ejb-name>SupplierEJB</ejb-name>
              <home>com.tpt.practice.entityBeans.cmp.product.relationship.SupplierHome</home>
              <remote>com.tpt.practice.entityBeans.cmp.product.relationship.Supplier</remote>
              <ejb-class>com.tpt.practice.entityBeans.cmp.product.relationship.SupplierEJB</ejb-class>
              <persistence-type>Container</persistence-type>
              <prim-key-class>java.lang.String</prim-key-class>
              <reentrant>False</reentrant>
              <cmp-version>2.x</cmp-version>
              <abstract-schema-name>AA_Supplier</abstract-schema-name>
              <cmp-field>
                   <field-name>supplierID</field-name>
              </cmp-field>
              <cmp-field>
                   <field-name>name</field-name>
              </cmp-field>
              <primkey-field>supplierID</primkey-field>
              <ejb-ref>
                        <ejb-ref-name>ProducEJB</ejb-ref-name>
                        <ejb-ref-type>Entity</ejb-ref-type>
                        <home>com.tpt.practice.entityBeans.cmp.product.ProductHome</home>
                        <remote>com.tpt.practice.entityBeans.cmp.product.Product</remote>
                        <ejb-link>ProductEJB#ProductEJB.jar</ejb-link>
              </ejb-ref>
              <query>
                   <query-method>
                        <method-name>findByName</method-name>
                        <method-params>
                             <method-param>java.lang.String</method-param>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Supplier AS a WHERE a.name =
                        ?1]]>
                   </ejb-ql>
              </query>
              <query>
                   <query-method>
                        <method-name>findAllSuppliers</method-name>
                        <method-params>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Supplier AS a WHERE a.supplierID
                        IS NOT NULL]]>
                   </ejb-ql>
              </query>
         </entity>
         <entity>
              <ejb-name>ProductEJB</ejb-name>
              <home>com.tpt.practice.entityBeans.cmp.product.relationship.ProductHome</home>
              <remote>com.tpt.practice.entityBeans.cmp.product.relationship.Product</remote>
              <local-home>com.tpt.practice.entityBeans.cmp.product.relationship.ProductLocalHome</local-home>
              <local>com.tpt.practice.entityBeans.cmp.product.relationship.ProductLocal</local>
              <ejb-class>com.tpt.practice.entityBeans.cmp.product.relationship.ProductEJB</ejb-class>
              <persistence-type>Container</persistence-type>
              <prim-key-class>com.tpt.practice.entityBeans.cmp.product.relationship.ProductPK</prim-key-class>
              <reentrant>False</reentrant>
              <cmp-version>2.x</cmp-version>
              <abstract-schema-name>AA_Product</abstract-schema-name>
              <cmp-field>
                   <field-name>productID</field-name>
              </cmp-field>
              <cmp-field>
                   <field-name>name</field-name>
              </cmp-field>
              <cmp-field>
                   <field-name>description</field-name>
              </cmp-field>
              <cmp-field>
                   <field-name>basePrice</field-name>
              </cmp-field>
              <cmp-field>
                   <field-name>supplierID</field-name>
              </cmp-field>
              <primkey-field>productID</primkey-field>
              <query>
                   <query-method>
                        <method-name>findByName</method-name>
                        <method-params>
                             <method-param>java.lang.String</method-param>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Product AS a WHERE a.name =
                        ?1]]>
                   </ejb-ql>
              </query>
              <query>
                   <query-method>
                        <method-name>findByDescription</method-name>
                        <method-params>
                             <method-param>java.lang.String</method-param>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Product AS a WHERE a.description
                        = ?1]]>
                   </ejb-ql>
              </query>
              <query>
                   <query-method>
                        <method-name>findByBasePrice</method-name>
                        <method-params>
                             <method-param>double</method-param>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Product AS a WHERE a.basePrice =
                        ?1]]>
                   </ejb-ql>
              </query>
              <query>
                   <query-method>
                        <method-name>findExpensiveProducts</method-name>
                        <method-params>
                             <method-param>double</method-param>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Product AS a WHERE a.basePrice >
                        ?1]]>
                   </ejb-ql>
              </query>
              <query>
                   <query-method>
                        <method-name>findCheapProducts</method-name>
                        <method-params>
                             <method-param>double</method-param>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Product AS a WHERE a.basePrice <
                        ?1]]>
                   </ejb-ql>
              </query>
              <query>
                   <query-method>
                        <method-name>findAllProducts</method-name>
                        <method-params>
                        </method-params>
                   </query-method>
                   <ejb-ql>
                        <![CDATA[SELECT OBJECT(a) FROM AA_Product AS a WHERE a.productID
                        IS NOT NULL]]>
                   </ejb-ql>
              </query>
         </entity>
         </enterprise-beans>
         <relationships>
         <ejb-relation>
              <ejb-relation-name>Product Supplier</ejb-relation-name>
              <ejb-relationship-role>
                   <ejb-relationship-role-name>Supplier supplies Products</ejb-relationship-role-name>
                   <multiplicity>One</multiplicity>
                   <relationship-role-source>
                        <ejb-name>SupplierEJB</ejb-name>
                   </relationship-role-source>
                   <cmr-field>
                        <cmr-field-name>products</cmr-field-name>
                        <cmr-field-type>java.util.Collection</cmr-field-type>
                   </cmr-field>
              </ejb-relationship-role>
              <ejb-relationship-role>
                   <ejb-relationship-role-name>Product supplied by Supplier</ejb-relationship-role-name>
                   <multiplicity>Many</multiplicity>
                   <relationship-role-source>
                        <ejb-name>ProductEJB</ejb-name>
                   </relationship-role-source>
              </ejb-relationship-role>
         </ejb-relation>
         </relationships>
         <assembly-descriptor>
              <container-transaction>
              <method>
                   <ejb-name>SupplierEJB</ejb-name>
                   <method-intf>Remote</method-intf>
                   <method-name>*</method-name>
              </method>
              <trans-attribute>Required</trans-attribute>
              </container-transaction>
         </assembly-descriptor>
    </ejb-jar>

    I think u r some confusion with productID and SuppliedID . primary key of one column( productId ) can be a foreign key of other table colum( SuppliedID). but foreign key( SuppliedID) can not be a primary key of second table .u declared SuppliedId as primary key . so ur mapping is incorrect.

  • TopLink essentials: extra where clause for one to many relationship?

    We have a lot of tables that contain "historic" records. Those are marked by a column "historic" holding a value "Y". Sometimes we are not interested in historic values. For example in the next case:
    @Entity
    @Table(name="ART")
    public class Article {
        @OneToMany(mappedBy="article", cascade=CascadeType.ALL, fetch=FetchType.LAZY)
        private Collection<ArticleStats> arcItems;
        public Collection<ArticleStats> getArticleStats() {
            return arcItems;
    }One article can have multiple "stats". We are in this case only interested in the "stats" of this article that are not historic. In SQL terms, I would like to add an extra where clause: "WHERE historic = 'N'".
    Of course inheritance (with discriminators) is an option, but I don't prefer that. We have a lot of relationships like this and using inheritance would mean we have to add a lot of extra classes. Is there a way to add an extra where clause to the query that is used to retrieve all the stats records related tot my Article?
    We use TopLink essentials with an IBM AS/400 database.

    The JPA Spec does not handle this case, but TopLink Essentials does. You will need to customize your TopLink descriptor using a DescriptorCustomizer. You can set your DescriptorCustomizer in your persistence.xml using the "toplink.descriptor.customizer.<entity-name>" property set to the class name "<package>.<class>" of your customizer class.
    The customizer would look something like:
    public class MyCustomizer implements DescriptorCustomizer {
    public void customize(ClassDescriptor descriptor) {
    OneToManyMapping mapping = (OneToManyMapping )descriptor.getMappingForAttributeName("arcItems");
    ExpressionBuilder builder = new ExpressionBuilder();
    mapping.setSelectionCriteria(builder.getField("STAT.ART_ID").equal(builder.getParameter("ART.ID").and(builder.getField("HISTORY").equal("N")));
    If you never wanted historical records you could also add this expression to your descriptor's additionalJoinExpression.
    James Sutherland

  • Using translate function for one to many character translation

    Hi friends!
    Can anybody tell me whether it is possible to use built in translate function for converting some text from a one alphabet to another one, if these alphabets are of different length. Something like
    SELECT TRANSLATE('текст',
    'АБВГДЕЕЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ',
    'ABCGDEF"*GH*"HIJKLMNOPQRSTYVWXYZ') FROM dual;
    Or there is another function for this, or it is impossible?
    Thanks

    Hi,
    Maybe you could use REPLACE just once, and then TRANSLATE the rest?
    Something like:
    SELECT TRANSLATE(REPLACE('ABcDE', 'c', 'xz'),
                     'ABCDE',
                     'abcde')  from dual;
    TRANSLATE(REPLACE('ABCDE','C','XZ'),'ABCDE','ABCDE')
    abxzde                                             
    1 row selected.Regards
    Peter

  • Sql squery for one to many relationship

    I need to write sql for below requirement:
    table structure is
    serial no LPN
    1 4
    2 4
    3 6
    4 6
    5 6
    6 3
    7 3
    8 3
    9 1
    I have to pick distinct 'LPN' like below:
    (any serial no can be picked for the distinct LPN)
    results needs to be as below:
    serial no LPN
    1 4
    3 6
    6 3
    9 1
    Please suggest with sql.

    Hi,
    915766 wrote:
    I need to write sql for below requirement:
    table structure is
    serial no LPN
    1 4
    2 4
    3 6
    4 6
    5 6
    6 3
    7 3
    8 3
    9 1
    I have to pick distinct 'LPN' like below:That sounds like a job for "GROUP BY lpn".
    (any serial no can be picked for the distinct LPN)It looks like you're displaying the lowest serial_no for each lpn. That's easy to do, using the aggregate MIN function.
    results needs to be as below:
    serial no LPN
    1 4
    3 6
    6 3
    9 1
    Please suggest with sql.Here's one way:
    SELECT    MIN (serial_no)   AS serial_no
    ,         lpn
    FROM      table_x
    GROUP BY  lpn
    ORDER BY  lpn     -- if wanted
    I hope this answers your question.
    If not, post a little sample data (CREATE TABLE and INSERT statements, relevant columns only), and also post the results you want from that data.
    Explain, using specific examples, how you get those results from that data.
    Always say which version of Oracle you're using (e.g., 11.2.0.2.0).
    See the forum FAQ {message:id=9360002}

  • Can I use Airport Express for one laptop to use another's connection?

    I'm at a hotel with my MacBook Pro connected and on the Internet. I would like my wife to be able to use her MacBook Pro using my internet connection. Can I plug in my Airport Express into my laptop and have her use my connection somehow?
    Thanks.

    I'm at a hotel with my MacBook Pro connected and on the Internet. I would like my wife to be able to use her MacBook Pro using my internet connection. Can I plug in my Airport Express into my laptop and have her use my connection somehow?
    Thanks.

  • One-to-many/foreign keys howto

    I have a situation where I'm trying to assemble a web of data and not make
    JDO mad.
    Here's the structure. I load this data in in batches, with an entry being
    placed in a load history table (H) to track each batch. Each batch
    contains primary (M) records associated with 0..n qualifying records from
    one or both of two auxiliary tables (D, L). All liberally salted with
    primary and foreign keys for referential integrity, and most of the keys
    are compounds, since the "M" identifiers get recycled for each batch load.
    Or, in other words, the "M" key is an ID plus an H key.
    Here's a map:
    H--0..n-->M
    __ +--0..n-->D
    __ +--0..n-->L
    Just to make things even more fun, the primary key of the H table is an
    Oracle 8 "DATE" type, which -- unlike ANSI SQL -- is actually a
    "TIMESTAMP". Kodo is rendering this as a java.util.Date rather than
    java.sql.Date, which is fine, because I need the full millisecond
    resolution. Interestingly, when I altered the schema type to "timestamp",
    load operations failed because the "column value was too big" according to
    Oracle.
    Also adding to the enjoyment, the actual order of presentation of data is
    that ALL M records come in, then ALL D records and finally ALL L records.
    I create my own H when the load starts.
    Now ideally, the whole shooting match will be a single pass/fail
    transaction, but that's for later.
    Right now, I can create the H, no problem and M's no problem. However,
    adding the D's and L's fails come commit time:
    kodo.util.FatalUserException: Attempt to set column "OFAC_ADDRESS.LOAD_ID"
    to two different values: "7/9/04 9:41 AM", "7/9/04 9:41 AM" This can occur
    when you fail to set both sides of a two-sided relation between objects,
    or when you map different fields to the same column, but you do not keep
    the values of these fields in synch.
    The granularity of the timestamps printed isn't making life easier, so I
    double-checked the D record's actual local value
    ADDRESS SERIALIZER A: Fri Jul 09 09:41:58 EDT 2004/Fri Jul 09 09:41:58 EDT
    2004
    ADDRESS SERIALIZER B: 1089380518179/1089380518179 (getTime())
    ADDRESS SERIALIZER C: -1541174818/-1541174818 (hashCode())
    I think I need a clearer understanding of what actions cascade here and
    what actions require manual help. For M, I did a setH(H) plus a
    setHid(H.getId()) and that made it happy. For D's and L's, of course, I
    also have to do a setM(M), where, because of the way the data comes in, I
    had to lookup the previously-stored M based on the M.id plus H.id.
    Now the parent objects contain sets of child objects. In theory, I should
    be adding the newly-created children to those sets, but in practice,
    setting the parent on the child appears to cause this to happen
    automagically, though I still have to manually set the local value of the
    foreign key field.
    I really need to find a good FM to RT. Online (and in the Kodo docs), I
    find a lot about setting up the XML for one-to-many mapping, but the Java
    coding side is taken as obvious. Regrettably, few things are obvious to me.
    I suppose I should excerpt the schema just for completeness:
    <table name="LOAD_HISTORY">
    <pk name="SYS_C0036906" column="LOAD_ID"/>
    <column name="LIST_TYPE" type="varchar" size="32"/>
    <column name="LOADED_BY" type="varchar" size="32"/>
    <column name="LOAD_ID" type="date" not-null="true" size="7"/>
    <column name="SUNSET_TIME" type="date" size="7"/>
    <fk name="FK_LOADHISTORY_LOADEDBY" delete-action="exception"
    to-table="OFAC.OFAC_USERS" column="LOADED_BY"/>
    </table>
    <table name="OFAC_ADDRESS">
    <pk name="SYS_C0036904">
    <on column="ADDRESS_ID"/>
    <on column="LOAD_ID"/>
    </pk>
    <column name="ADDRESS" type="varchar" size="125"/>
    <column name="ADDRESS_ID" type="decimal" not-null="true"
    size="22"/>
    <column name="CITY" type="varchar" size="64"/>
    <column name="COUNTRY" type="varchar" size="64"/>
    <column name="ID" type="decimal" size="22"/>
    <column name="LOAD_ID" type="date" not-null="true" size="7"/>
    <column name="REMARKS" type="varchar" size="300"/>
    <fk name="FK_OFACADDRESS_ID" delete-action="exception"
    to-table="OFAC.OFAC_MAIN">
    <join column="ID" to-column="ID"/>
    <join column="LOAD_ID" to-column="LOAD_ID"/>
    </fk>
    <fk name="FK_OFACADDRESS_LOADID" delete-action="exception"
    to-table="OFAC.LOAD_HISTORY" column="LOAD_ID"/>
    </table>
    <table name="OFAC_ALIAS">
    <pk name="SYS_C0036905">
    <on column="ALIAS_ID"/>
    <on column="LOAD_ID"/>
    </pk>
    <column name="ALIAS" type="varchar" size="200"/>
    <column name="ALIAS_ID" type="decimal" not-null="true"
    size="22"/>
    <column name="ID" type="decimal" size="22"/>
    <column name="LOAD_ID" type="date" not-null="true" size="7"/>
    <column name="REMARKS" type="varchar" size="300"/>
    <fk name="FK_OFACALIAS_ID" delete-action="exception"
    to-table="OFAC.OFAC_MAIN">
    <join column="ID" to-column="ID"/>
    <join column="LOAD_ID" to-column="LOAD_ID"/>
    </fk>
    <fk name="FK_OFACALIAS_LOADID" delete-action="exception"
    to-table="OFAC.LOAD_HISTORY" column="LOAD_ID"/>
    </table>
    <table name="OFAC_MAIN">
    <pk name="SYS_C0036903">
    <on column="ID"/>
    <on column="LOAD_ID"/>
    </pk>
    <column name="ID" type="decimal" not-null="true" size="22"/>
    <column name="LOAD_ID" type="date" not-null="true" size="7"/>
    <column name="REMARKS" type="varchar" size="300"/>
    <fk name="FK_OFACMAIN_LOADID" delete-action="exception"
    to-table="OFAC.LOAD_HISTORY" column="LOAD_ID"/>
    </table>

    Hi Greg,
    I'm just using the unmodified schema-to-mapping output. The one thing that
    might be unusual is that I've broken up related tables into discrete
    packages, but I believe all the items in question are in this package.
    Here it is:
    <?xml version="1.0" encoding="UTF-8"?>
    <mapping>
    <package name="com.everbank.finance.ofac3.jdo.sdn">
    <class name="LoadHistory">
    <jdbc-class-map type="base" table="OFAC.LOAD_HISTORY"/>
    <jdbc-version-ind type="state-image"/>
    <field name="listType">
    <jdbc-field-map type="value" column="LIST_TYPE"/>
    </field>
    <field name="loadId">
    <jdbc-field-map type="value" column="LOAD_ID"/>
    </field>
    <field name="ofacAddress">
    <jdbc-field-map type="one-many"
    ref-column.LOAD_ID="LOAD_ID" table="OFAC.OFAC_ADDRESS"/>
    </field>
    <field name="ofacAlias">
    <jdbc-field-map type="one-many"
    ref-column.LOAD_ID="LOAD_ID" table="OFAC.OFAC_ALIAS"/>
    </field>
    <field name="ofacMains">
    <jdbc-field-map type="one-many"
    ref-column.LOAD_ID="LOAD_ID" table="OFAC.OFAC_MAIN"/>
    </field>
    <field name="ofacUsers">
    <jdbc-field-map type="one-one" column.USER_ID="LOADED_BY"/>
    </field>
    <field name="runInfoLoadIdents">
    <jdbc-field-map type="one-many"
    ref-column.LOAD_ID="LOAD_ID" table="OFAC.RUN_INFO_LOAD_ID"/>
    </field>
    <field name="sunsetTime">
    <jdbc-field-map type="value" column="SUNSET_TIME"/>
    </field>
    </class>
    <class name="OfacAddress">
    <jdbc-class-map type="base" table="OFAC.OFAC_ADDRESS"/>
    <jdbc-version-ind type="state-image"/>
    <field name="address">
    <jdbc-field-map type="value" column="ADDRESS"/>
    </field>
    <field name="addressId">
    <jdbc-field-map type="value" column="ADDRESS_ID"/>
    </field>
    <field name="addressMp1">
    <jdbc-field-map type="value" column="ADDRESS_MP1"/>
    </field>
    <field name="addressMp2">
    <jdbc-field-map type="value" column="ADDRESS_MP2"/>
    </field>
    <field name="city">
    <jdbc-field-map type="value" column="CITY"/>
    </field>
    <field name="cityMp1">
    <jdbc-field-map type="value" column="CITY_MP1"/>
    </field>
    <field name="cityMp2">
    <jdbc-field-map type="value" column="CITY_MP2"/>
    </field>
    <field name="country">
    <jdbc-field-map type="value" column="COUNTRY"/>
    </field>
    <field name="countryMp1">
    <jdbc-field-map type="value" column="COUNTRY_MP1"/>
    </field>
    <field name="countryMp2">
    <jdbc-field-map type="value" column="COUNTRY_MP2"/>
    </field>
    <field name="loadHistory">
    <jdbc-field-map type="one-one" column.LOAD_ID="LOAD_ID"/>
    </field>
    <field name="loadId">
    <jdbc-field-map type="value" column="LOAD_ID"/>
    </field>
    <field name="ofacMain">
    <jdbc-field-map type="one-one" column.ID="ID"
    column.LOAD_ID="LOAD_ID"/>
    </field>
    <field name="remarks">
    <jdbc-field-map type="value" column="REMARKS"/>
    </field>
    </class>
    <class name="OfacAlias">
    <jdbc-class-map type="base" table="OFAC.OFAC_ALIAS"/>
    <jdbc-version-ind type="state-image"/>
    <field name="alias">
    <jdbc-field-map type="value" column="ALIAS"/>
    </field>
    <field name="aliasId">
    <jdbc-field-map type="value" column="ALIAS_ID"/>
    </field>
    <field name="aliasMp1">
    <jdbc-field-map type="value" column="ALIAS_MP1"/>
    </field>
    <field name="aliasMp2">
    <jdbc-field-map type="value" column="ALIAS_MP2"/>
    </field>
    <field name="aliasType">
    <jdbc-field-map type="value" column="ALIAS_TYPE"/>
    </field>
    <field name="loadHistory">
    <jdbc-field-map type="one-one" column.LOAD_ID="LOAD_ID"/>
    </field>
    <field name="loadId">
    <jdbc-field-map type="value" column="LOAD_ID"/>
    </field>
    <field name="ofacMain">
    <jdbc-field-map type="one-one" column.ID="ID"
    column.LOAD_ID="LOAD_ID"/>
    </field>
    <field name="remarks">
    <jdbc-field-map type="value" column="REMARKS"/>
    </field>
    </class>
    <class name="OfacMain">
    <jdbc-class-map type="base" table="OFAC.OFAC_MAIN"/>
    <jdbc-version-ind type="state-image"/>
    <field name="callSign">
    <jdbc-field-map type="value" column="CALL_SIGN"/>
    </field>
    <field name="callSignMp1">
    <jdbc-field-map type="value" column="CALL_SIGN_MP1"/>
    </field>
    <field name="callSignMp2">
    <jdbc-field-map type="value" column="CALL_SIGN_MP2"/>
    </field>
    <field name="grt">
    <jdbc-field-map type="value" column="GRT"/>
    </field>
    <field name="id">
    <jdbc-field-map type="value" column="ID"/>
    </field>
    <field name="loadHistory">
    <jdbc-field-map type="one-one" column.LOAD_ID="LOAD_ID"/>
    </field>
    <field name="loadId">
    <jdbc-field-map type="value" column="LOAD_ID"/>
    </field>
    <field name="matchInfos">
    <jdbc-field-map type="one-many" ref-column.ID="ID"
    ref-column.LOAD_ID="LOAD_ID" table="OFAC.MATCH_INFO"/>
    </field>
    <field name="ofacAddress">
    <jdbc-field-map type="one-many" ref-column.ID="ID"
    ref-column.LOAD_ID="LOAD_ID" table="OFAC.OFAC_ADDRESS"/>
    </field>
    <field name="ofacAlias">
    <jdbc-field-map type="one-many" ref-column.ID="ID"
    ref-column.LOAD_ID="LOAD_ID" table="OFAC.OFAC_ALIAS"/>
    </field>
    <field name="pName">
    <jdbc-field-map type="value" column="P_NAME"/>
    </field>
    <field name="pNameMp1">
    <jdbc-field-map type="value" column="P_NAME_MP1"/>
    </field>
    <field name="pNameMp2">
    <jdbc-field-map type="value" column="P_NAME_MP2"/>
    </field>
    <field name="program">
    <jdbc-field-map type="value" column="PROGRAM"/>
    </field>
    <field name="remarks">
    <jdbc-field-map type="value" column="REMARKS"/>
    </field>
    <field name="sName">
    <jdbc-field-map type="value" column="S_NAME"/>
    </field>
    <field name="sNameMp1">
    <jdbc-field-map type="value" column="S_NAME_MP1"/>
    </field>
    <field name="sNameMp2">
    <jdbc-field-map type="value" column="S_NAME_MP2"/>
    </field>
    <field name="sdnType">
    <jdbc-field-map type="value" column="SDN_TYPE"/>
    </field>
    <field name="ssn">
    <jdbc-field-map type="value" column="SSN"/>
    </field>
    <field name="title">
    <jdbc-field-map type="value" column="TITLE"/>
    </field>
    <field name="tonnage">
    <jdbc-field-map type="value" column="TONNAGE"/>
    </field>
    <field name="vesselFlag">
    <jdbc-field-map type="value" column="VESSEL_FLAG"/>
    </field>
    <field name="vesselOwner">
    <jdbc-field-map type="value" column="VESSEL_OWNER"/>
    </field>
    <field name="vesselOwnerMp1">
    <jdbc-field-map type="value" column="VESSEL_OWNER_MP1"/>
    </field>
    <field name="vesselOwnerMp2">
    <jdbc-field-map type="value" column="VESSEL_OWNER_MP2"/>
    </field>
    <field name="vesselType">
    <jdbc-field-map type="value" column="VESSEL_TYPE"/>
    </field>
    </class>
    </package>
    </mapping>
    Als, just for giggles, the JDO file
    <?xml version="1.0" encoding="UTF-8"?>
    <jdo>
    <package name="com.everbank.finance.ofac3.jdo.sdn">
    <class name="LoadHistory"
    objectid-class="com.everbank.finance.ofac3.jdo.LoadHistoryId">
    <field name="loadId" primary-key="true"/>
    <field name="ofacAddress">
    <collection element-type="OfacAddress"/>
    <extension vendor-name="kodo" key="inverse-owner"
    value="loadHistory"/>
    </field>
    <field name="ofacAlias">
    <collection element-type="OfacAlias"/>
    <extension vendor-name="kodo" key="inverse-owner"
    value="loadHistory"/>
    </field>
    <field name="ofacMains">
    <collection element-type="OfacMain"/>
    <extension vendor-name="kodo" key="inverse-owner"
    value="loadHistory"/>
    </field>
    <field name="runInfoLoadIdents">
    <collection
    element-type="com.everbank.finance.ofac3.jdo.match.RunInfoLoadIdent"/>
    <extension vendor-name="kodo" key="inverse-owner"
    value="loadHistory"/>
    </field>
    </class>
    <class name="OfacAddress"
    objectid-class="com.everbank.finance.ofac3.jdo.OfacAddressId">
    <field name="addressId" primary-key="true"/>
    <field name="loadId" primary-key="true"/>
    </class>
    <class name="OfacAlias"
    objectid-class="com.everbank.finance.ofac3.jdo.OfacAliasId">
    <field name="aliasId" primary-key="true"/>
    <field name="loadId" primary-key="true"/>
    </class>
    <class name="OfacMain"
    objectid-class="com.everbank.finance.ofac3.jdo.OfacMainId">
    <field name="id" primary-key="true"/>
    <field name="loadId" primary-key="true"/>
    <field name="matchInfos">
    <collection
    element-type="com.everbank.finance.ofac3.jdo.match.MatchInfo"/>
    <extension vendor-name="kodo" key="inverse-owner"
    value="ofacMain"/>
    </field>
    <field name="ofacAddress">
    <collection element-type="OfacAddress"/>
    <extension vendor-name="kodo" key="inverse-owner"
    value="ofacMain"/>
    </field>
    <field name="ofacAlias">
    <collection element-type="OfacAlias"/>
    <extension vendor-name="kodo" key="inverse-owner"
    value="ofacMain"/>
    </field>
    </class>
    </package>
    Greg Campbell wrote:
    Hi Tim,
    Could you send the your mapping information corresponding to the class that
    maps to table: OFAC_ADDRESS. In particular, I'm looking for what fields
    map to OFAC_ADDRESS.LOAD_ID. This will hopefully give us a hint as to
    what's going wrong.
    Thanks,
    Greg
    "Tim Holloway" <[email protected]> wrote in message
    news:[email protected]...
    I have a situation where I'm trying to assemble a web of data and not make
    JDO mad.
    <snipped>

  • Mapping in TopLink workbench: Sorting order for one-to-one mapping field

    Hi,
    we have a requirement; though it is one-to-many relationship, we wanted to map it as one-to-one, so that we get latest of the mappped entity based on attribute:*noOfVisits*. For this, I am trying to make descending order by noOfVisists in workbench; but no provision there.. it is available only for one-to-many relationship;
    If I map as one-to-many, I can specify the sorting order; but is there any option to limit the max rows of it to *1*.
    Pls suggest the solution; I am trying to avoid to write named query for this; and wanted to get from the entity itself by navigating to one-to-one relationship entity.
    Thanks,
    Dhana kumar.

    Hello,
    If you want strictly JPA options, I'd either not map it and query for it (which you can then store it in the object if you want in a transient attribute), or map it as 1:M with the order by and have a getSingleVistedChild type method that returns the first element if its noOfVisits value is 1.
    Mapping it using the 1:1 as you are asking can be done. All that is required is that you add selection criteria for the query used in the mapping as described here:
    http://wiki.eclipse.org/EclipseLink/Examples/JPA/MappingSelectionCriteria
    Best Regards,
    Chris

  • Toplink one to many relationship

    I am working on DAO layer for One to many relationship
    how can we get the list child objects based on parent id..
    we are using toplink ...

    Hi,
    If you are using with JPA, try this:
    em.createQuery("select c from child c where c.parent.id = :id").setParameter("id", parentObject.getId())
                                                                                           .getResultList();

  • Partial object read ant one-to-many relationship

    Hi,
    does Toplink support partial object reading for one-to-many links?

    Not really, but it might work in 10.1.3 or 11g preview. You can use joining (join fetch) on 1-m (10.1.3) and m-m (11g).
    In 11g you can use fetch groups that do support 1-m and m-m, and also let you join fetch or batch the relationship. You need to use weaving to use fetch groups.

  • Dount in Hibernate - One-to-many relationship

    Hi ,
    I have a doubt in hibernate mappings for one-to-many.
    these are the two bean classes:
    public class Register {
         protected String userid;
         protected String firstname;
         protected String lastname;
         protected String password;
         protected String email;
         protected String language;
         protected Address address;
         protected Set contacts;     
         protected Set events;
    public class Event {
         protected Long eventid;
         protected String eventname;
         protected Date eventdate;
         protected Set confirmations;
         protected Invitation invitation;
    and here is the hibernate mapping for the register class :
    <set name="events" table="EVENT" lazy="true" inverse="true" cascade="all" sort="unsorted" optimistic-lock="true" embed-xml="true">
                   <key column="USER_ID" on-delete="noaction"/>
                   <one-to-many class="com.evite.beans.Event" not-found="exception" embed-xml="true"/>
            </set>       the table decription is :
    Register table :
    USER_ID - PK
    ADDRESS_ID
    FIRSTNAME
    LASTNAME
    PASSWORD
    EMAIL
    LANGUAGE
    Event Table:
    EVENT_ID | PK
    INVITATION_ID |
    EVENTNAME |
    EVENTDATE |
    USER_ID | FK
    Now while inserting records the register object is created first in the program and inserted into the tables .at a later stage when the user(corresponding to register table record) adds events how do i insert the user_id also in the table ?
    The event tables does not have variable for user id......
    If i have to add the user_id variable in the bean class how do i map it to the table ?
    Someone pls reply !!!!
    Thanks in advance!
    susen

    You need to declare a link table between the two. Change your attribute entry to read thus:
    <set name="events" table="register_event_link" ...Then re-export your schema. This will create the link table. When you add Event and do a saveOrUpdate() on the register instance, any unsaved Event objects will be saved to the events table and appropriate rows will be added to the register_event_link table to preserve the state of the set.
    I would recommend purchasing a copy of Hibernate In Action if you do not already have one.
    Dave.

Maybe you are looking for

  • Depot Scenario

    Dear Gurus, I am trying to map Depot scenario, the following documents are created while goods receipt (MIGO) Stock Account Debit GR/IR Account Credit And at the time of invoice Verification the entries are as follows Vendor Account Credit GR/IR Acco

  • VERY dissapointed by lack of Mac support

    Hi, well I've read a lot of posts on the web now about this and they all say the same thing: Why doesn't Creative make Mac drivers? And I've yet to see a reply! I've bought a Vista IM and of course it won't work on my iMac G5. I think this will put m

  • Iphone 4 yellow tinted screen

    i have iphone 4 32gb for like i think 3 months now and yesterday when i compare my phone to my sister iphone 4 16gb i noticed that her iphone is brighter then mine and is whiter. My iphone have like a warm yellow when i compared it and the brightness

  • Mapping of users with roles

    Hi, in oracle BPM there is a mapping of user with the roles.I have search the BPM database tables in dev_soainfra schema but no tables consists of mapping of these tables.I have a urgent requirement of it so that i can use it on adf form. Can anyone

  • FP won't work

    I installed the latest version but it won'trun videos.  I get a msg that upgrade is needed.