I was mistaken.. the swap does not cause correct code, just compileable
code.. 
With the second schema, the BaseItemCategory class will have a
getItems(Criteria crit) method 
generated as such:

    public List getItems(Criteria criteria) throws TorqueException
    {
        if (collItems == null)
        {
            if ( isNew() )
            {
               collItems = new ArrayList();
            }
            else
            {
                   criteria.add(ItemPeer.CAT_ID, getCatId() );
                   criteria.add(ItemPeer.SUB_CAT_ID, getCatId() );
                   collItems = ItemPeer.doSelect(criteria);
            }
        }
<-cut->
As you can see, the SUB_CAT_ID is beeing added to the criteria, which is
incorrect.

> -----Original Message-----
> From: Russell Smyth [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, September 10, 2002 4:32 PM
> To: Turbine Torque Developers List (E-mail)
> Subject: invalid code generated for two foreign keys
> 
> 
> I am having a generation problem. Here is a minimal test case that
> demonstrates the problem
> 
> 3 tables
> 
> ItemCategory (CAT_ID)
> ItemSubCategory (CAT_ID, SUB_CAT_ID)
> Item (CAT_ID, SUB_CAT_ID, ITEM_ID)
> 
> Each SubCategory belongs to one and only one Category, each 
> Item belongs to
> one and only one SubCategory.
> To allow traversal from Category->Item(s), SubCategory->Item(s),
> Item->SubCategory, and Item->Category I 
> attempted to place a foreign key relationship from item to 
> category and item
> to subcategory with the following
> schema:
> 
> <?xml version="1.0"?>
> <!DOCTYPE database SYSTEM
> "http://jakarta.apache.org/turbine/dtd/database.dtd";>
> <!-- Created from schema.xml.all generated by JDBCToXMLSchema -->
> <database>
> 
>     <table javaName="ItemCategory" name="CATEGORY">
>         <column javaName="CatId" name="CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>     </table>
>         <table javaName="ItemSubCategory" name="SUBCAT">
>         <column javaName="CatId" name="CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>         <column javaName="SubCatId" name="SUB_CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>     </table>
>     <table javaName="Item" name="ITEM">
>         <column javaName="CatId" name="CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>         <column javaName="SubCatId" name="SUB_CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>         <column javaName="ItemId" name="ITEM_ID" primaryKey="true"
>             required="true" size="2" type="DECIMAL"/>
>         <foreign-key foreignTable="CATEGORY">
>            <reference foreign="CAT_ID" local="CAT_ID"/>
>         </foreign-key>
>         <foreign-key foreignTable="SUBCAT">
>            <reference foreign="CAT_ID" local="CAT_ID"/>
>            <reference foreign="SUB_CAT_ID" local="SUB_CAT_ID"/>
>         </foreign-key>
>     </table>
> </database>
> 
> This generates invalid code - creating two complete sets of 
> accessors for
> Items to
> BaseItemSubCategory:
> "List collItems;" appears twice, "Item getItems()" appears twice, etc.
> 
> However, if you swap the foreign-key definitions it works as 
> expected (this
> schema)
> 
> <?xml version="1.0"?>
> <!DOCTYPE database SYSTEM
> "http://jakarta.apache.org/turbine/dtd/database.dtd";>
> <!-- Created from schema.xml.all generated by JDBCToXMLSchema -->
> <database>
> 
>     <table javaName="ItemCategory" name="CATEGORY">
>         <column javaName="CatId" name="CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>     </table>
>         <table javaName="ItemSubCategory" name="SUBCAT">
>         <column javaName="CatId" name="CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>         <column javaName="SubCatId" name="SUB_CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>     </table>
>     <table javaName="Item" name="ITEM">
>         <column javaName="CatId" name="CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>         <column javaName="SubCatId" name="SUB_CAT_ID"
>             primaryKey="true" required="true" size="2" 
> type="DECIMAL"/>
>         <column javaName="ItemId" name="ITEM_ID" primaryKey="true"
>             required="true" size="2" type="DECIMAL"/>
>         <foreign-key foreignTable="SUBCAT">
>            <reference foreign="CAT_ID" local="CAT_ID"/>
>            <reference foreign="SUB_CAT_ID" local="SUB_CAT_ID"/>
>         </foreign-key>
>         <foreign-key foreignTable="CATEGORY">
>            <reference foreign="CAT_ID" local="CAT_ID"/>
>         </foreign-key>
>     </table>
> </database>
> 
> Also, we ran into a name conflict - having a table javaName 
> of "Category"
> will not
>  work due to a getCategory in BaseItem. Problematic but we 
> worked around it.
> 
> --
> To unsubscribe, e-mail:   
> <mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail: 
> <mailto:[EMAIL PROTECTED]>
> 

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to