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]>