You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2006/07/15 16:38:16 UTC

svn commit: r422236 [1/3] - in /db/ojb/trunk/src: schema/ test/org/apache/ojb/broker/ test/org/apache/ojb/broker/cache/ test/org/apache/ojb/broker/cloneable/ test/org/apache/ojb/broker/metadata/ test/org/apache/ojb/broker/metadata/torque/

Author: arminw
Date: Sat Jul 15 07:38:14 2006
New Revision: 422236

URL: http://svn.apache.org/viewvc?rev=422236&view=rev
Log:
merge trunk with 1.0.x

Modified:
    db/ojb/trunk/src/schema/ojbcore-schema.xml
    db/ojb/trunk/src/schema/ojbtest-data-new.xml
    db/ojb/trunk/src/schema/ojbtest-data.dtd
    db/ojb/trunk/src/schema/ojbtest-data.xml
    db/ojb/trunk/src/schema/ojbtest-schema.xml
    db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/ArticleWithStockDetail.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/BidirectionalAssociationTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest2.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/Container.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/ExtentAwarePathExpressionsTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/FactoryCreatedBaseObject.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/FactoryCreatedObject.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/FieldConversionTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/InheritanceMultipleTableTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/InitializableObject.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/KeyConstraintViolationTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/M2NTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/MtoNTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/MultipleDBTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/ObjectRepository.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/OneToManyTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/Ownable1Impl.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/Ownable2Impl.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/Owner.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/cache/LocalCacheTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/cloneable/CloneableGroup.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/MetadataMultithreadedTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/MetadataTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/PersistentFieldPerfTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/PersistentFieldTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/ReadonlyTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/RepositoryPersistorTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/torque/TorqueForeignKeyGeneratorTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/torque/TorqueRepositoryGeneratorTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/torque/TorqueTableGeneratorTest.java
    db/ojb/trunk/src/test/org/apache/ojb/broker/metadata/torque/TorqueTablePreprocessorTest.java

Modified: db/ojb/trunk/src/schema/ojbcore-schema.xml
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/schema/ojbcore-schema.xml?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/schema/ojbcore-schema.xml (original)
+++ db/ojb/trunk/src/schema/ojbcore-schema.xml Sat Jul 15 07:38:14 2006
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_1.dtd">
+<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
 <!--
 #/* Copyright 2002-2004 The Apache Software Foundation
 # *

Modified: db/ojb/trunk/src/schema/ojbtest-data-new.xml
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/schema/ojbtest-data-new.xml?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/schema/ojbtest-data-new.xml (original)
+++ db/ojb/trunk/src/schema/ojbtest-data-new.xml Sat Jul 15 07:38:14 2006
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="ISO-8859-1" ?>
+<?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
 <!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
 <!--
 #/* Copyright 2002-2006 The Apache Software Foundation
@@ -17,6 +17,7 @@
 # */
 -->
 <dataset name="all">
+
     <ProductGroup groupId="1" groupName="Beverages" description="Alles leckere zum Süffeln"/>
     <ProductGroup groupId="2" groupName="Spices" description="Gewürze, Dressings etc."/>
     <ProductGroup groupId="3" groupName="Meat" description=""/>
@@ -25,6 +26,7 @@
     <ProductGroup groupId="6" groupName="bread" description=""/>
     <ProductGroup groupId="7" groupName="Fruits" description="Früchte etc."/>
     <ProductGroup groupId="8" groupName="Dairy Products" description="Kat 8"/>
+    <ProductGroup groupId="4711" groupName="Random Articles" description="Used for MetadataMultithreadedTest"/>
 
     <Article articleId="1" articleName="Chai" supplierId="1" productGroupId="1" unit="10 boxes x 20 bags" price="18.53" stock="39" orderedUnits="0" minimumStock="10" isSelloutArticle="0"/>
     <Article articleId="2" articleName="Chang" supplierId="1" productGroupId="1" unit="24 - 12 oz bottles" price="19.89" stock="17" orderedUnits="40" minimumStock="25" isSelloutArticle="0"/>
@@ -103,6 +105,9 @@
     <Article articleId="75" articleName="Rhönbräu Klosterbier" supplierId="12" productGroupId="1" unit="24 - 0.5 l bottles" price="7.75" stock="125" orderedUnits="0" minimumStock="25" isSelloutArticle="0"/>
     <Article articleId="76" articleName="Lakkalikööri" supplierId="23" productGroupId="1" unit="500 ml" price="18.0" stock="57" orderedUnits="0" minimumStock="20" isSelloutArticle="0"/>
     <Article articleId="77" articleName="Original Frankfurter grüne Soße" supplierId="12" productGroupId="2" unit="12 boxes" price="13.0" stock="32" orderedUnits="0" minimumStock="15" isSelloutArticle="0"/>
+    <Article articleId="4711" articleName="Proxied Article 1" supplierId="12" productGroupId="4711" unit="1 Java class" price="1.3" stock="5" orderedUnits="0" minimumStock="1" isSelloutArticle="0"/>
+    <Article articleId="4712" articleName="Proxied Article 2" supplierId="12" productGroupId="4711" unit="1 Java class" price="1.5" stock="2" orderedUnits="0" minimumStock="0" isSelloutArticle="0"/>
+    <Article articleId="4713" articleName="Proxied Article 3" supplierId="12" productGroupId="4711" unit="1 Java class" price="1.9" stock="7" orderedUnits="0" minimumStock="5" isSelloutArticle="0"/>
 
     <BookArticle articleId="100" articleName="Hamlet" supplierId="12" productGroupId="5" unit="12 boxes" price="34.0" stock="32" orderedUnits="0" minimumStock="15" isSelloutArticle="0" isbn="1234567890" author="W. Shakespeare"/>
     <BookArticle articleId="101" articleName="Faust" supplierId="12" productGroupId="5" unit="12 boxes" price="56.0" stock="32" orderedUnits="0" minimumStock="15" isSelloutArticle="0" isbn="1234567890" author="J.W. v. Goethe"/>
@@ -135,8 +140,8 @@
 
     <Role member_id="1" project_id="1" roleName="founder"/>
     <Role member_id="1" project_id="2" roleName="friend"/>
-    <Role member_id="2" project_id="2" roleName="lead"/>
     <Role member_id="2" project_id="1" roleName="developer"/>
+    <Role member_id="2" project_id="2" roleName="lead"/>
     <Role member_id="2" project_id="3" roleName="developer"/>
     <Role member_id="3" project_id="2" roleName="tester"/>
     <Role member_id="3" project_id="4" roleName="user"/>

Modified: db/ojb/trunk/src/schema/ojbtest-data.dtd
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/schema/ojbtest-data.dtd?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/schema/ojbtest-data.dtd (original)
+++ db/ojb/trunk/src/schema/ojbtest-data.dtd Sat Jul 15 07:38:14 2006
@@ -180,7 +180,8 @@
     PDTable|
     Owner|
     Ownable1|
-    Ownable2)*>
+    Ownable2
+    )*>
 <!ATTLIST dataset
     name CDATA #REQUIRED
 >
@@ -356,8 +357,8 @@
     DetailText CDATA #IMPLIED
 >
 
-<!ELEMENT PointTable EMPTY>
-<!ATTLIST PointTable
+<!ELEMENT Point EMPTY>
+<!ATTLIST Point
     Id CDATA #REQUIRED
     X CDATA #REQUIRED
     Y CDATA #REQUIRED

Modified: db/ojb/trunk/src/schema/ojbtest-data.xml
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/schema/ojbtest-data.xml?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/schema/ojbtest-data.xml (original)
+++ db/ojb/trunk/src/schema/ojbtest-data.xml Sat Jul 15 07:38:14 2006
@@ -131,12 +131,12 @@
     <Person Id="9" Firstname="guido" Lastname="guido"/>
     <Person Id="10" Firstname="hank%" Lastname="hank"/>
 
-    <Project Id="1" Title="OJB" Description="OJB"/>
-    <Project Id="2" Title="SODA" Description="SODA"/>
-    <Project Id="3" Title="HSQLDB" Description="HSQLDB"/>
-    <Project Id="4" Title="XERCES" Description="XERCES"/>
-    <Project Id="5" Title="Linux" Description="Linux"/>
-    <Project Id="6" Title="mySQL" Description="mySQL"/>
+    <Project Id="1" Title="OJB" Description="OJB" />
+    <Project Id="2" Title="SODA" Description="SODA" />
+    <Project Id="3" Title="HSQLDB" Description="HSQLDB" />
+    <Project Id="4" Title="XERCES" Description="XERCES" />
+    <Project Id="5" Title="Linux" Description="Linux" />
+    <Project Id="6" Title="mySQL" Description="mySQL" />
 
     <PersonProject PersonId="1" ProjectId="1" Rolename="founder"/>
     <PersonProject PersonId="1" ProjectId="2" Rolename="friend"/>
@@ -180,8 +180,8 @@
     <News Id="2" Headline="Ferrai for sale (CARS - BUYERS)"/>
     <News Id="3" Headline="Brazil World Cup Champion ! (SPORTS)"/>
 
-    <Paper Id="10" Headline="NONE" Issuedate="today" Author="NONE"/>
-    <Paper Id="11" Headline="SALES" Issuedate="yesterday" Author="SALES MAN"/>
+    <Paper Id="10" Issuedate="today" Author="NONE"/>
+    <Paper Id="11" Issuedate="yesterday" Author="SALES MAN"/>
 
     <Topic Id="10" Name="Buyers" Importance="important"/>
     <Topic Id="11" Name="Sellers" Importance="unimportant"/>

Modified: db/ojb/trunk/src/schema/ojbtest-schema.xml
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/schema/ojbtest-schema.xml?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/schema/ojbtest-schema.xml (original)
+++ db/ojb/trunk/src/schema/ojbtest-schema.xml Sat Jul 15 07:38:14 2006
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="ISO-8859-1" standalone="no" ?>
-<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database_3_1.dtd">
+<!DOCTYPE database SYSTEM "http://db.apache.org/torque/dtd/database.dtd">
 <!--
 #/* Copyright 2002-2004 The Apache Software Foundation
 # *
@@ -208,13 +208,13 @@
     <column name="FATHER_ID" type="INTEGER"/>
   </table>
 
-  <table name="LOCKED_BY_VERSION">
+  <table name="VERSIONLOCKED">
     <column name="ID" required="true" primaryKey="true" type="INTEGER"/>
     <column name="VALUE_" type="VARCHAR" size="150"/>
     <column name="VERSION_" type="INTEGER"/>
   </table>
 
-  <table name="LOCKED_BY_TIMESTAMP">
+  <table name="TIMESTAMPLOCKED">
     <column name="ID" required="true" primaryKey="true" type="INTEGER"/>
     <column name="VALUE_" type="VARCHAR" size="150"/>
     <column name="TIMESTAMP_" type="TIMESTAMP"/>
@@ -239,7 +239,7 @@
     <column name="MASTER_TEXT" type="VARCHAR" size="255"/>
   </table>
 
-  <table name="MDTEST_DETAIL_FKINPK">
+  <table name="MDTEST_FKINPK">
     <column name="MASTERID" required="true" primaryKey="true" type="INTEGER"/>
     <column name="DETAILID" required="true" primaryKey="true" type="INTEGER"/>
     <column name="DETAIL_TEXT" type="VARCHAR" size="255"/>
@@ -248,7 +248,7 @@
     </foreign-key>
   </table>
 
-  <table name="MDTEST_DETAIL_FKNOPK">
+  <table name="MDTEST_FKNOPK">
     <column name="DETAILID" required="true" primaryKey="true" type="INTEGER"/>
     <column name="MASTERID" required="true" type="INTEGER"/>
     <column name="DETAIL_TEXT" type="VARCHAR" size="255"/>
@@ -378,8 +378,8 @@
     </table>
 
     <table name="BIDIR_A">
-       <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/>
-       <column name="fk_to_B" required="false" type="VARCHAR" size="48"/>
+       <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="150"/>
+       <column name="fk_to_B" required="false" type="VARCHAR" size="150"/>
 <!--
 	BRJ : can't reference a table that is created later
        <foreign-key foreignTable="BIDIR_B">
@@ -389,8 +389,8 @@
    </table>
 
    <table name="BIDIR_B">
-       <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="48"/>
-       <column name="fk_to_A" required="false" type="VARCHAR" size="48"/>
+       <column name="pk" required="true" primaryKey="true" type="VARCHAR" size="150"/>
+       <column name="fk_to_A" required="false" type="VARCHAR" size="150"/>
        <foreign-key foreignTable="BIDIR_A">
          <reference local="fk_to_A" foreign="pk"/>
        </foreign-key>
@@ -423,6 +423,7 @@
     </foreign-key>
   </table>
 
+
   <table name="FISH">
     <column name="foodId" required="true" primaryKey="true" type="INTEGER"/>
     <column name="name" type="VARCHAR" size="60"/>
@@ -713,27 +714,27 @@
     private long uid;  // primary key
     private long node_refid;
     -->
-    <table name="FIELD_CONVERSION_NODE">
+    <table name="FIELDCONV_NODE">
         <column name="NODE_ID" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
         <column name="NODE_STATE" required="true" primaryKey="true" type="INTEGER"/>
         <column name="PARENT_UID" type="DECIMAL" size="15,0"/>
     </table>
 
-    <table name="FIELD_CONVERSION_NODE_NOINC">
+    <table name="FIELDCONV_NOINC">
         <column name="NODE_ID" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
     </table>
 
     <table name="CONVERSION_VO">
         <column name="PK_WITH_AUTO" required="true" primaryKey="true" type="INTEGER"/>
-        <column name="PK_WITHOUT_AUTO" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="PK_WO_AUTO" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NORMAL_WITH_AUTO" required="false" primaryKey="false" type="INTEGER"/>
-        <column name="NORMAL_WITHOUT_AUTO" required="false" primaryKey="false" type="INTEGER"/>
+        <column name="NORMAL_WO_AUTO" required="false" primaryKey="false" type="INTEGER"/>
     </table>
 
     <!-- =================================================== -->
     <!-- NumberAccuarcyTest                                  -->
     <!-- =================================================== -->
-    <table name="NUMBER_ACCURACY_TEST">
+    <table name="NUMBER_ACCURACY">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="SCALE_TWO" type="DECIMAL" size="15,6"/>
         <column name="SCALE_FOUR" type="DECIMAL" size="15,6"/>
@@ -856,6 +857,7 @@
         </foreign-key>
     </table>
 
+
     <table name="REF_OBJ_A">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
@@ -878,6 +880,7 @@
         <column name="FK_REF" type="INTEGER"/>
     </table>
 
+
     <!-- =================================================== -->
     <!-- PrimaryKeyForeignKeyTest - PB-api                   -->
     <!-- =================================================== -->
@@ -925,13 +928,13 @@
         <column name="FK_REF" type="INTEGER"/>
     </table>
 
-    <table name="READTEST_ADDRESS">
+    <table name="READTEST_ADDR">
         <column name="OJB_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_REF" type="INTEGER"/>
     </table>
 
-    <table name="READTEST_ADDRESS_TYPE">
+    <table name="READTEST_ADDR_TYPE">
         <column name="OJB_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_REF" type="INTEGER"/>
@@ -1061,7 +1064,7 @@
         <column name="NAME" type="VARCHAR" size="150"/>
     </table>
 
-    <table name="COL_COLLECTIBLE_A">
+    <table name="COLLECTIBLE_A">
         <column name="COL_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="GAT_ID" type="INTEGER"/>
@@ -1071,7 +1074,7 @@
         </foreign-key>
     </table>
 
-    <table name="COL_COLLECTIBLE_BASE">
+    <table name="COLLECTIBLE_BASE">
         <column name="COL_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="GAT_ID" type="INTEGER"/>
@@ -1081,7 +1084,7 @@
         </foreign-key>
     </table>
 
-    <table name="COL_COLLECTIBLE_B">
+    <table name="COLLECTIBLE_B">
         <column name="COL_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="GAT_ID" type="INTEGER"/>
@@ -1091,7 +1094,7 @@
         </foreign-key>
     </table>
 
-    <table name="COL_COLLECTIBLE_C">
+    <table name="COLLECTIBLE_C">
         <column name="COL_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="GAT_ID" type="INTEGER"/>
@@ -1102,7 +1105,7 @@
         </foreign-key>
     </table>
 
-    <table name="COL_COLLECTIBLE_CC">
+    <table name="COLLECTIBLE_CC">
         <column name="COL_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="GAT_ID" type="INTEGER"/>
@@ -1113,7 +1116,7 @@
         </foreign-key>
     </table>
 
-    <table name="COL_COLLECTIBLE_C2">
+    <table name="COLLECTIBLE_C2">
         <column name="COL_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="GAT_ID" type="INTEGER"/>
@@ -1124,7 +1127,7 @@
         </foreign-key>
     </table>
 
-    <table name="COL_COLLECTIBLE_D">
+    <table name="COLLECTIBLE_D">
         <column name="COL_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="OJB_CONCRETE_CLASS" type="VARCHAR" size="150"/>
@@ -1136,40 +1139,49 @@
     </table>
 
 
-    <table name="COL_2_PROJECT">
+    <table name="COL2_PRJ">
         <column name="PRO_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
     </table>
-    <table name="COL_2_SUB_PROJECT">
+    <table name="COL2_SUBPRJ">
+        <column name="SUB_ID" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="NAME" type="VARCHAR" size="150"/>
+        <column name="FK_PRO_ID" type="INTEGER"/>
+        <foreign-key foreignTable="COL2_PRJ">
+            <reference local="FK_PRO_ID" foreign="PRO_ID"/>
+        </foreign-key>
+    </table>
+    <table name="COL2_SUBPRJ2">
         <column name="SUB_ID" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="SUB_DATE" required="true" primaryKey="true" type="TIMESTAMP"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_PRO_ID" type="INTEGER"/>
-        <foreign-key foreignTable="COL_2_PROJECT">
+        <foreign-key foreignTable="COL2_PRJ">
             <reference local="FK_PRO_ID" foreign="PRO_ID"/>
         </foreign-key>
     </table>
-    <table name="COL_2_DEVELOPER">
+    <table name="COL2_DEV">
         <column name="DEV_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_PRO_ID" type="INTEGER"/>
-        <foreign-key foreignTable="COL_2_PROJECT">
+        <foreign-key foreignTable="COL2_PRJ">
             <reference local="FK_PRO_ID" foreign="PRO_ID"/>
         </foreign-key>
     </table>
 
-    <table name="COL_2_SUB_PROJECT_SELF">
+    <table name="COL2_SUBPRJ_SELF">
         <column name="SUB_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_PRO_ID" type="INTEGER"/>
-        <foreign-key foreignTable="COL_2_SUB_PROJECT_SELF">
+        <foreign-key foreignTable="COL2_SUBPRJ_SELF">
             <reference local="FK_PRO_ID" foreign="SUB_ID"/>
         </foreign-key>
     </table>
-    <table name="COL_2_DEVELOPER_SELF">
+    <table name="COL2_DEV_SELF">
         <column name="DEV_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_PRO_ID" type="INTEGER"/>
-        <foreign-key foreignTable="COL_2_SUB_PROJECT_SELF">
+        <foreign-key foreignTable="COL2_SUBPRJ_SELF">
             <reference local="FK_PRO_ID" foreign="SUB_ID"/>
         </foreign-key>
     </table>
@@ -1194,7 +1206,6 @@
         <column name="NAME" type="VARCHAR" size="150"/>
     </table>
 
-
     <!-- =================================================== -->
     <!-- PB 'readonly' attribute test                        -->
     <!-- =================================================== -->
@@ -1276,11 +1287,20 @@
 
     <table name="COL_BOOKS">
         <column name="PK" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="NAME" type="VARCHAR" size="100"/>
         <column name="BOOKSHELF_FK" required="true" primaryKey="true" type="INTEGER"/>
     </table>
 
     <table name="COL_DVDS">
         <column name="PK" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="NAME" type="VARCHAR" size="100"/>
+        <column name="BOOKSHELF_FK" required="true" primaryKey="true" type="INTEGER"/>
+    </table>
+
+    <table name="COL_CANDIES">
+        <column name="PK" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="NAME" type="VARCHAR" size="150"/>
+        <column name="INGREDIENTS" type="VARCHAR" size="250"/>
         <column name="BOOKSHELF_FK" required="true" primaryKey="true" type="INTEGER"/>
     </table>
 
@@ -1288,14 +1308,14 @@
     <!-- =================================================== -->
     <!-- PB nested fields test                               -->
     <!-- =================================================== -->
-    <table name="NESTED_FIELDS_TAB">
+    <table name="NESTED_TAB">
      <column name="OBJ_ID" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
      <column name="NAME" type="VARCHAR" size="150"/>
      <column name="NESTED_VALUE" type="VARCHAR" size="150"/>
      <column name="NESTED_DESCRIPTION" type="VARCHAR" size="150"/>
    </table>
 
-    <table name="NESTED_FIELDS_ENTRY">
+    <table name="NESTED_ENTRY">
      <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
      <column name="FK_ID" required="true" type="DECIMAL" size="15,0"/>
      <column name="NAME" type="VARCHAR" size="150"/>
@@ -1322,29 +1342,29 @@
     <!-- =================================================== -->
     <!-- Mapping Classes on Multiple Joined Tables test      -->
     <!-- =================================================== -->
-    <table name="INHERITANCE_COMPANY">
+    <table name="INH_COMPANY">
         <column name="OBJ_ID" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
         <column name="NAME" type="VARCHAR" size="150"/>
     </table>
 
-    <table name="INHERITANCE_ADDRESS">
+    <table name="INH_ADDRESS">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="STREET" type="VARCHAR" size="150"/>
         <column name="FK_EMPLOYEE_1" type="INTEGER"/>
         <column name="FK_EMPLOYEE_2" type="DECIMAL" size="15,0"/>
     </table>
 
-    <table name="INHERITANCE_EMPLOYEE">
+    <table name="INH_EMPLOYEE">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="OBJ_ID_2" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_ADDRESS" type="INTEGER"/>
-        <foreign-key foreignTable="INHERITANCE_ADDRESS">
+        <foreign-key foreignTable="INH_ADDRESS">
     	  <reference local="FK_ADDRESS" foreign="OBJ_ID"/>
 	    </foreign-key>
     </table>
 
-    <table name="INHERITANCE_EXECUTIVE">
+    <table name="INH_EXECUTIVE">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="OBJ_ID_2" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
         <column name="SUPER_ID" type="INTEGER"/>
@@ -1352,66 +1372,66 @@
         <column name="MANAGER_ID" type="INTEGER"/>
         <column name="MANAGER_ID_2" type="DECIMAL" size="15,0"/>
         <column name="DEPARTMENT" type="VARCHAR" size="150"/>
-        <foreign-key foreignTable="INHERITANCE_EMPLOYEE">
+        <foreign-key foreignTable="INH_EMPLOYEE">
     	  <reference local="SUPER_ID" foreign="OBJ_ID"/>
     	  <reference local="SUPER_ID_2" foreign="OBJ_ID_2"/>
 	    </foreign-key>
     </table>
 
-    <table name="INHERITANCE_MANAGER">
+    <table name="INH_MANAGER">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="OBJ_ID_2" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
         <column name="FK_CONSORTIUM" type="INTEGER"/>
         <column name="SUPER_ID" type="INTEGER"/>
         <column name="SUPER_ID_2" type="DECIMAL" size="15,0"/>
-        <foreign-key foreignTable="INHERITANCE_EXECUTIVE">
+        <foreign-key foreignTable="INH_EXECUTIVE">
     	  <reference local="SUPER_ID" foreign="OBJ_ID"/>
     	  <reference local="SUPER_ID_2" foreign="OBJ_ID_2"/>
 	    </foreign-key>
     </table>
 
-    <table name="INHERITANCE_SHAREHOLDER">
+    <table name="INH_SHAREHOLDER">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="OBJ_ID_2" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
         <column name="SHARE_" type="INTEGER"/>
         <column name="SUPER_ID" type="INTEGER"/>
         <column name="SUPER_ID_2" type="DECIMAL" size="15,0"/>
-        <foreign-key foreignTable="INHERITANCE_MANAGER">
+        <foreign-key foreignTable="INH_MANAGER">
     	  <reference local="SUPER_ID" foreign="OBJ_ID"/>
     	  <reference local="SUPER_ID_2" foreign="OBJ_ID_2"/>
 	    </foreign-key>
     </table>
 
-    <table name="INHERITANCE_EMPLOYEE_ADDRESS">
+    <table name="INH_EMPL_ADDR">
         <column name="EMPLOYEE_ID_1" required="true" primaryKey="true" type="INTEGER"/>
         <column name="EMPLOYEE_ID_2" required="true" primaryKey="true" type="DECIMAL" size="15,0"/>
         <column name="ADDRESS_ID" required="true" primaryKey="true" type="INTEGER"/>
     </table>
 
-    <table name="INHERITANCE_CONSORTIUM">
+    <table name="INH_CONSORTIUM">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
     </table>
 
 
-    <table name="INHERITANCE_ENTITY">
+    <table name="INH_ENTITY">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
     </table>
 
-    <table name="INHERITANCE_ANIMAL">
+    <table name="INH_ANIMAL">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="WEIGHT" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_PARENT" type="INTEGER"/>
     </table>
 
-    <table name="INHERITANCE_DOG">
+    <table name="INH_DOG">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="LEGS" type="INTEGER"/>
     </table>
 
-     <table name="INHERITANCE_FOOD">
+     <table name="INH_FOOD">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
          <column name="FK_ANIMAL" type="INTEGER"/>
     </table>
@@ -1436,25 +1456,25 @@
     <!-- =================================================== -->
     <!-- Runtime reference setting test                      -->
     <!-- =================================================== -->
-    <table name="RUNTIME_SETTING_ONE">
+    <table name="RUNTIME_ONE">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
     </table>
 
-     <table name="RUNTIME_SETTING_MAIN">
+     <table name="RUNTIME_MAIN">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_REF" type="INTEGER"/>
-         <foreign-key foreignTable="RUNTIME_SETTING_ONE">
+         <foreign-key foreignTable="RUNTIME_ONE">
     	  <reference local="FK_REF" foreign="OBJ_ID"/>
 	    </foreign-key>
     </table>
 
-    <table name="RUNTIME_SETTING_MANY">
+    <table name="RUNTIME_MANY">
         <column name="OBJ_ID" required="true" primaryKey="true" type="INTEGER"/>
         <column name="NAME" type="VARCHAR" size="150"/>
         <column name="FK_MAIN" type="INTEGER"/>
-        <foreign-key foreignTable="RUNTIME_SETTING_MAIN">
+        <foreign-key foreignTable="RUNTIME_MAIN">
     	  <reference local="FK_MAIN" foreign="OBJ_ID"/>
 	    </foreign-key>
     </table>
@@ -1557,7 +1577,7 @@
         </foreign-key>
     </table>
 
-    <table name="CT_SHOP_DISTRIBUTOR">
+    <table name="CT_SHOP_DIST">
         <column name="SHOP_ID" type="INTEGER"/>
         <column name="DISTRIBUTOR_ID" type="INTEGER"/>
         <foreign-key foreignTable="CT_SHOP">
@@ -1602,6 +1622,9 @@
         </foreign-key>
     </table>
 
+
+
+
     <!-- =================================================== -->
     <!-- Complex test model tables                           -->
     <!-- =================================================== -->
@@ -1817,7 +1840,7 @@
             javaName="minimumStock"/>
     <column name="Auslaufartikel" type="INTEGER"
             javaName="inSelloutArticle"/>
-    <foreign-key foreignTable="Kategorien_2">
+    <foreign-key foreignTable="Kategorien_2" name="Artikel2Kateg2FK">
       	<reference local="KatName" foreign="Kategorie_Name"/>
     </foreign-key>
   </table>
@@ -1889,6 +1912,23 @@
   <table name="Ownable2">
     <column name="id" required="true" primaryKey="true" type="INTEGER"/>
   </table>
+
+  <table name="CONTAINER_TBL">
+        <column name="ID_" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="NAME" type="VARCHAR" size="150"/>
+        <column name="TARGET" type="JAVA_OBJECT"/>
+        <column name="EDITOR" type="JAVA_OBJECT"/>
+  </table>
+
+  <table name="UTC_A">
+        <column name="ID_" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="NAME" type="VARCHAR" size="250"/>
+    </table>
+
+    <table name="UTC_B">
+        <column name="ID_" required="true" primaryKey="true" type="INTEGER"/>
+        <column name="DESCRIPTION" type="VARCHAR" size="250"/>
+    </table>
 
   <table name="DeepInnerClass">
       <column name="id"

Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/AllTests.java Sat Jul 15 07:38:14 2006
@@ -42,6 +42,7 @@
 import org.apache.ojb.broker.sequence.NativeIdentifierTest;
 import org.apache.ojb.broker.sequence.SMMultiThreadedTest;
 import org.apache.ojb.broker.sequence.SequenceManagerTest;
+import org.apache.ojb.broker.lob.LOBTest;
 
 /**
  * the facade to all TestCases in this package.
@@ -94,7 +95,6 @@
         suite.addTestSuite(SMMultiThreadedTest.class);
         suite.addTestSuite(KeyConstraintViolationTest.class);
         suite.addTestSuite(RsIteratorTest.class);
-        suite.addTestSuite(BlobTest.class);
         suite.addTestSuite(CharacterTest.class);
         suite.addTestSuite(LogServiceTest.class);
         suite.addTestSuite(MetaDataSerializationTest.class);
@@ -119,9 +119,6 @@
         suite.addTestSuite(AbstractExtentClassTest.class);
         suite.addTestSuite(NestedFieldsTest.class);
         suite.addTestSuite(ReadonlyTest.class);
-        // arminw: this test doesn't pass without failure on all machines
-        // because the behavior of the JVM gc is not predetermined.
-        // suite.addTestSuite(ReferenceMapTest.class);
         suite.addTestSuite(MultithreadedReadTest.class);
         suite.addTestSuite(CollectionTest2.class);
         suite.addTestSuite(NumberAccuracyTest.class);
@@ -147,10 +144,14 @@
         suite.addTestSuite(PicoComponentContainerTest.class);
         suite.addTestSuite(SpringComponentContainerTest.class);
         suite.addTestSuite(NoPkReferenceTest.class);
+        suite.addTestSuite(UnwrapHelperTest.class);
+        suite.addTestSuite(LOBTest.class);
+        suite.addTestSuite(JdbcJavaObjectTest.class);
         suite.addTestSuite(CreationTest.class);
-        
+
         // BRJ: ensure shutdown of hsqldb
-        suite.addTestSuite(HsqldbShutdown.class);        
+        suite.addTestSuite(HsqldbShutdown.class);
         return suite;
     }
+
 }

Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/ArticleWithStockDetail.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/ArticleWithStockDetail.java?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/ArticleWithStockDetail.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/ArticleWithStockDetail.java Sat Jul 15 07:38:14 2006
@@ -28,6 +28,6 @@
     /** return a string representation of an article*/
     public String toString()
     {
-        return super.toString() + "stockDetail   " + getStockDetail() + "\n";
+        return super.toString() + " stockDetail: " + getStockDetail();
     }
 }

Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/BidirectionalAssociationTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/BidirectionalAssociationTest.java?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/BidirectionalAssociationTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/BidirectionalAssociationTest.java Sat Jul 15 07:38:14 2006
@@ -1,17 +1,19 @@
 package org.apache.ojb.broker;
 
-import java.util.Iterator;
+import java.io.Serializable;
 import java.util.Collection;
+import java.util.Iterator;
 
+import org.apache.ojb.broker.metadata.ClassDescriptor;
+import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
 import org.apache.ojb.broker.query.Criteria;
 import org.apache.ojb.broker.query.Query;
 import org.apache.ojb.broker.query.QueryFactory;
-import org.apache.ojb.broker.metadata.ClassDescriptor;
-import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
+import org.apache.ojb.broker.util.ObjectModification;
 import org.apache.ojb.junit.PBTestCase;
 
 /**
- * tests a bidirectional association A<-->B
+ * Tests a bidirectional association A<-->B
  * @see org.apache.ojb.odmg.BidirectionalAssociationTest for equivalent test in ODMG
  */
 public class BidirectionalAssociationTest extends PBTestCase
@@ -37,14 +39,227 @@
         super.tearDown();
     }
 
+    public void testCreateDeleteWithAutoincrement_1()
+    {
+        ojbChangeReferenceSetting(ObjectAA.class, "relatedB", true,
+                ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, false);
+        ojbChangeReferenceSetting(ObjectBB.class, "relatedA", true,
+                ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, false);
+
+        ObjectAA a = new ObjectAA();
+        ObjectBB b = new ObjectBB();
+        broker.beginTransaction();
+        // first store both objects
+        broker.store(a, ObjectModification.INSERT);
+        broker.store(b, ObjectModification.INSERT);
+        // now set references
+        a.setRelatedB(b);
+        b.setRelatedA(a);
+        // update both
+        broker.store(a, ObjectModification.UPDATE);
+        broker.commitTransaction();
+
+        Criteria crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        Query query = QueryFactory.newQuery(ObjectAA.class, crit);
+        ObjectAA result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNotNull(result_AA);
+        assertNotNull(result_AA.getRelatedB());
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        ObjectBB result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNotNull(result_BB);
+        assertNotNull(result_BB.getRelatedA());
+
+        broker.beginTransaction();
+        // cascade delete enabled, will delete first ObjectAA then ObjectBB
+        broker.delete(b);
+        broker.commitTransaction();
+
+        crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        query = QueryFactory.newQuery(ObjectAA.class, crit);
+        result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNull(result_AA);
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNull(result_BB);
+    }
+
+    public void testCreateDeleteWithAutoincrement_2()
+    {
+        ojbChangeReferenceSetting(ObjectAA.class, "relatedB", true,
+                ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_NONE, false);
+        ojbChangeReferenceSetting(ObjectBB.class, "relatedA", true,
+                ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_NONE, false);
+
+        ObjectAA a = new ObjectAA();
+        ObjectBB b = new ObjectBB();
+        // now set references
+        a.setRelatedB(b);
+        b.setRelatedA(a);
+        broker.beginTransaction();
+        // first store both objects
+        broker.store(a);
+        // update b to force OJB to set the FK
+        broker.store(b);
+        broker.commitTransaction();
+
+        Criteria crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        Query query = QueryFactory.newQuery(ObjectAA.class, crit);
+        ObjectAA result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNotNull(result_AA);
+        assertNotNull(result_AA.getRelatedB());
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        ObjectBB result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNotNull(result_BB);
+        assertNotNull(result_BB.getRelatedA());
+
+        broker.beginTransaction();
+        broker.delete(b);
+        broker.delete(a);
+        broker.commitTransaction();
+
+        crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        query = QueryFactory.newQuery(ObjectAA.class, crit);
+        result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNull(result_AA);
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNull(result_BB);
+    }
+
+    public void testCreateDeleteWithAutoincrement_3()
+    {
+        ojbChangeReferenceSetting(ObjectAA.class, "relatedB", true,
+                ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
+        ojbChangeReferenceSetting(ObjectBB.class, "relatedA", true,
+                ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
+
+        ObjectAA a = new ObjectAA();
+        ObjectBB b = new ObjectBB();
+        // now set references
+        a.setRelatedB(b);
+        b.setRelatedA(a);
+        broker.beginTransaction();
+        // first insert a
+        broker.store(a, ObjectModification.INSERT);
+        // link (set FK to a) and insert b
+        broker.serviceBrokerHelper().link(b, true);
+        broker.store(b, ObjectModification.INSERT);
+        // link a (set FK to b)
+        broker.serviceBrokerHelper().link(a, false);
+        // update FK of a
+        broker.store(a, ObjectModification.UPDATE);
+        broker.commitTransaction();
+
+        Criteria crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        Query query = QueryFactory.newQuery(ObjectAA.class, crit);
+        ObjectAA result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNotNull(result_AA);
+        assertNotNull(result_AA.getRelatedB());
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        ObjectBB result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNotNull(result_BB);
+        assertNotNull(result_BB.getRelatedA());
+
+        broker.beginTransaction();
+        // cascade delete enabled
+        broker.delete(b);
+        broker.delete(a);
+        broker.commitTransaction();
+
+        crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        query = QueryFactory.newQuery(ObjectAA.class, crit);
+        result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNull(result_AA);
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNull(result_BB);
+    }
+
+    public void testCreateDeleteWithAutoincrement_4()
+    {
+        ojbChangeReferenceSetting(ObjectAA.class, "relatedB", true,
+                ObjectReferenceDescriptor.CASCADE_LINK, ObjectReferenceDescriptor.CASCADE_NONE, false);
+        ojbChangeReferenceSetting(ObjectBB.class, "relatedA", true,
+                ObjectReferenceDescriptor.CASCADE_LINK, ObjectReferenceDescriptor.CASCADE_NONE, false);
+
+        ObjectAA a = new ObjectAA();
+        ObjectBB b = new ObjectBB();
+        broker.beginTransaction();
+        // first store both objects
+        broker.store(a);
+        broker.store(b);
+        // now set references
+        a.setRelatedB(b);
+        b.setRelatedA(a);
+        // update a and b to force OJB to set the FK
+        broker.store(a);
+        broker.store(b);
+        broker.commitTransaction();
+
+        Criteria crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        Query query = QueryFactory.newQuery(ObjectAA.class, crit);
+        ObjectAA result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNotNull(result_AA);
+        assertNotNull(result_AA.getRelatedB());
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        ObjectBB result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNotNull(result_BB);
+        assertNotNull(result_BB.getRelatedA());
+
+        broker.beginTransaction();
+        broker.delete(b);
+        broker.commitTransaction();
+
+        crit = new Criteria();
+        crit.addLike("pk", a.getPk());
+        query = QueryFactory.newQuery(ObjectAA.class, crit);
+        result_AA = (ObjectAA) broker.getObjectByQuery(query);
+        assertNotNull(result_AA);
+        assertNull(result_AA.getRelatedB());
+
+        crit = new Criteria();
+        crit.addLike("pk", b.getPk());
+        query = QueryFactory.newQuery(ObjectBB.class, crit);
+        result_BB = (ObjectBB) broker.getObjectByQuery(query);
+        assertNull(result_BB);
+    }
+
     public void testAutoRefreshTrue()
     {
-        String pkSuffix = "_" + System.currentTimeMillis();
+        String pkSuffix = "testAutoRefreshTrue_" + System.currentTimeMillis();
         ObjectReferenceDescriptor ord_A = null;
         ObjectReferenceDescriptor ord_B = null;
-        ClassDescriptor cld_A = broker.getClassDescriptor(BidirectionalAssociationObjectA.class);
+        ClassDescriptor cld_A = broker.getClassDescriptor(ObjectA.class);
         ord_A = cld_A.getObjectReferenceDescriptorByName("relatedB");
-        ClassDescriptor cld_B = broker.getClassDescriptor(BidirectionalAssociationObjectB.class);
+        ClassDescriptor cld_B = broker.getClassDescriptor(ObjectB.class);
         ord_B = cld_B.getObjectReferenceDescriptorByName("relatedA");
         boolean oldA = ord_A.isRefresh();
         boolean oldB = ord_B.isRefresh();
@@ -55,7 +270,7 @@
             createWithUpdate(pkSuffix);
             Criteria crit = new Criteria();
             crit.addLike("pk", "%" + pkSuffix);
-            Query query = QueryFactory.newQuery(BidirectionalAssociationObjectB.class, crit);
+            Query query = QueryFactory.newQuery(ObjectB.class, crit);
             Collection result = broker.getCollectionByQuery(query);
             assertEquals(1, result.size());
         }
@@ -66,9 +281,9 @@
         }
     }
 
-    public void testCreateDelete()
+    public void testCreateDeleteDisabledAutoincrement_()
     {
-        String pkSuffix = "_" + System.currentTimeMillis();
+        String pkSuffix = "testCreateDeleteDisabledAutoincrement_" + System.currentTimeMillis();
         createWithUpdate(pkSuffix);
         deleteAllA();
         deleteAllB();
@@ -77,9 +292,9 @@
     private void createWithUpdate(String pkSuffix)
     {
         broker.beginTransaction();
-        BidirectionalAssociationObjectA a = new BidirectionalAssociationObjectA();
+        ObjectA a = new ObjectA();
         a.setPk("A" + pkSuffix);
-        BidirectionalAssociationObjectB b = new BidirectionalAssociationObjectB();
+        ObjectB b = new ObjectB();
         b.setPk("B" + pkSuffix);
         broker.store(a);
         broker.store(b);
@@ -104,12 +319,12 @@
         Criteria crit = new Criteria();
         Query q;
         Iterator iter;
-        q = QueryFactory.newQuery(BidirectionalAssociationObjectA.class, crit);
+        q = QueryFactory.newQuery(ObjectA.class, crit);
         iter = broker.getIteratorByQuery(q);
-        BidirectionalAssociationObjectA temp = null;
+        ObjectA temp = null;
         while (iter.hasNext())
         {
-            temp = (BidirectionalAssociationObjectA) iter.next();
+            temp = (ObjectA) iter.next();
             if (temp.getRelatedB() == null)
             {
                 fail("relatedB not found");
@@ -128,12 +343,12 @@
         Criteria crit = new Criteria();
         Query q;
         Iterator iter;
-        q = QueryFactory.newQuery(BidirectionalAssociationObjectB.class, crit);
+        q = QueryFactory.newQuery(ObjectB.class, crit);
         iter = broker.getIteratorByQuery(q);
-        BidirectionalAssociationObjectB temp = null;
+        ObjectB temp = null;
         while (iter.hasNext())
         {
-            temp = (BidirectionalAssociationObjectB) iter.next();
+            temp = (ObjectB) iter.next();
             if (temp.getRelatedA() == null)
             {
                 fail("relatedA not found");
@@ -165,14 +380,14 @@
         Criteria crit = new Criteria();
         Query q;
         Iterator iter;
-        q = QueryFactory.newQuery(BidirectionalAssociationObjectA.class, crit);
+        q = QueryFactory.newQuery(ObjectA.class, crit);
         iter = broker.getIteratorByQuery(q);
-        BidirectionalAssociationObjectA temp = null;
+        ObjectA temp = null;
         broker.beginTransaction();
         while (iter.hasNext())
         {
-            temp = (BidirectionalAssociationObjectA) iter.next();
-            BidirectionalAssociationObjectB b = temp.getRelatedB();
+            temp = (ObjectA) iter.next();
+            ObjectB b = temp.getRelatedB();
             if (b != null)
             {
                 b.setRelatedA(null);
@@ -183,19 +398,19 @@
         broker.commitTransaction();
     }
 
-   private void deleteAllB()
+    private void deleteAllB()
     {
         Criteria crit = new Criteria();
         Query q;
         Iterator iter;
-        q = QueryFactory.newQuery(BidirectionalAssociationObjectB.class, crit);
+        q = QueryFactory.newQuery(ObjectB.class, crit);
         iter = broker.getIteratorByQuery(q);
-        BidirectionalAssociationObjectB temp = null;
+        ObjectB temp = null;
         broker.beginTransaction();
         while (iter.hasNext())
         {
-            temp = (BidirectionalAssociationObjectB) iter.next();
-            BidirectionalAssociationObjectA a = temp.getRelatedA();
+            temp = (ObjectB) iter.next();
+            ObjectA a = temp.getRelatedA();
             if (a != null)
             {
                 a.setRelatedB(null);
@@ -204,5 +419,114 @@
             broker.delete(temp);
         }
         broker.commitTransaction();
+    }
+
+
+
+
+
+    //===================================================================
+    // inner classes
+    //===================================================================
+
+    /**
+     * with enabled autoincrement
+     */
+    public static class ObjectAA extends ObjectA
+    {
+
+    }
+    /**
+     * with enabled autoincrement
+     */
+    public static class ObjectBB extends ObjectB
+    {
+
+    }
+    /**
+     * with disabled autoincrement
+     */
+    public static class ObjectA implements Serializable
+    {
+        private String pk;
+        private String fkToB;
+        private ObjectB relatedB;
+
+        public ObjectA()
+        {
+        }
+
+        public String getPk()
+        {
+            return pk;
+        }
+
+        public void setPk(String pk)
+        {
+            this.pk = pk;
+        }
+
+        public String getFkToB()
+        {
+            return fkToB;
+        }
+
+        public void setFkToB(String fkToB)
+        {
+            this.fkToB = fkToB;
+        }
+
+        public ObjectB getRelatedB()
+        {
+            return relatedB;
+        }
+
+        public void setRelatedB(ObjectB relatedB)
+        {
+            this.relatedB = relatedB;
+        }
+    }
+    /**
+     * with disabled autoincrement
+     */
+    public static class ObjectB implements Serializable
+    {
+        private String pk;
+        private String fkToA;
+        private ObjectA relatedA;
+
+        public ObjectB()
+        {
+        }
+
+        public String getPk()
+        {
+            return pk;
+        }
+
+        public void setPk(String pk)
+        {
+            this.pk = pk;
+        }
+
+        public String getFkToA()
+        {
+            return fkToA;
+        }
+
+        public void setFkToA(String fkToA)
+        {
+            this.fkToA = fkToA;
+        }
+
+        public ObjectA getRelatedA()
+        {
+            return relatedA;
+        }
+
+        public void setRelatedA(ObjectA relatedA)
+        {
+            this.relatedA = relatedA;
+        }
     }
 }

Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest.java?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest.java Sat Jul 15 07:38:14 2006
@@ -9,10 +9,11 @@
 
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
+import org.apache.ojb.broker.metadata.ObjectReferenceDescriptor;
 import org.apache.ojb.broker.query.Criteria;
 import org.apache.ojb.broker.query.Query;
-import org.apache.ojb.broker.query.QueryByCriteria;
 import org.apache.ojb.broker.query.QueryFactory;
+import org.apache.ojb.broker.util.ObjectModification;
 import org.apache.ojb.broker.util.collections.RemovalAwareCollection;
 import org.apache.ojb.junit.PBTestCase;
 
@@ -68,12 +69,129 @@
  */
 public class CollectionTest extends PBTestCase
 {
+    static final int NONE = ObjectReferenceDescriptor.CASCADE_NONE;
+    static final int LINK = ObjectReferenceDescriptor.CASCADE_LINK;
+    static final int OBJECT = ObjectReferenceDescriptor.CASCADE_OBJECT;
+
     public static void main(String[] args)
     {
         String[] arr = {CollectionTest.class.getName()};
         junit.textui.TestRunner.main(arr);
     }
 
+    /**
+     * test for OJB-82
+     */
+    public void testUsingExtentWhichIsNotInheritedFromBaseClass() throws Exception
+    {
+        // TODO: fix this bug
+        if(ojbSkipKnownIssueProblem("Test for OJB-82 will be fixed in next version")) return;
+
+        String prefix = "testUsingExtentWhichIsNotInheritedFromBaseClass_" + System.currentTimeMillis();
+
+        ojbChangeReferenceSetting(BookShelf.class, "items", true, OBJECT, OBJECT, false);
+        ojbChangeReferenceSetting(DVD.class, "shelf", true, NONE, NONE, false);
+        ojbChangeReferenceSetting(Book.class, "shelf", true, NONE, NONE, false);
+        ojbChangeReferenceSetting(Candie.class, "shelf", true, NONE, NONE, false);
+
+        BookShelf bookShelf = new BookShelf(prefix);
+        BookShelfItem dvd = new DVD(prefix+ "_dvd", bookShelf);
+        BookShelfItem book = new Book(prefix + "_book", bookShelf);
+        Candie candie = new Candie(prefix + "_book", bookShelf);
+        List items = new ArrayList();
+        items.add(dvd);
+        items.add(book);
+        items.add(candie);
+        bookShelf.setItems(items);
+
+        broker.beginTransaction();
+        broker.store(bookShelf);
+        broker.commitTransaction();
+
+        broker.clearCache();
+        BookShelf loadedCopy = (BookShelf) broker.getObjectByIdentity(
+                broker.serviceIdentity().buildIdentity(BookShelf.class, bookShelf.getPk()));
+        assertNotNull(loadedCopy);
+        assertNotNull(loadedCopy.getItems());
+        assertEquals(3, loadedCopy.getItems().size());
+
+        broker.beginTransaction();
+        broker.clearCache();
+        Criteria criteria = new Criteria();
+        criteria.addLike("name", prefix + "%");
+        Query q = QueryFactory.newQuery(BookShelfItem.class, criteria);
+        Collection result = broker.getCollectionByQuery(q);
+        assertNotNull(result);
+        assertEquals(3, result.size());
+    }
+
+    public void testMoveProxyCollectionFromOneToAnother() throws Exception
+    {
+        String prefix = "testMoveProxyCollectionFromOneToAnother_" + System.currentTimeMillis();
+
+        ojbChangeReferenceSetting(BookShelf.class, "items", true, OBJECT, OBJECT, true);
+        ojbChangeReferenceSetting(DVD.class, "shelf", true, NONE, NONE, true);
+        ojbChangeReferenceSetting(Book.class, "shelf", true, NONE, NONE, true);
+
+        BookShelf bookShelf = new BookShelf(prefix);
+        BookShelf bookShelfSecond = new BookShelf(prefix+"_second");
+        BookShelfItem ev1 = new DVD(prefix+ "_dvd", bookShelf);
+        BookShelfItem ev2 = new Book(prefix + "_book", bookShelf);
+        bookShelf.addItem(ev1);
+        bookShelf.addItem(ev2);
+
+        broker.beginTransaction();
+        broker.store(bookShelfSecond);
+        broker.store(bookShelf);
+        broker.commitTransaction();
+
+        broker.clearCache();
+        BookShelf loadedCopy = (BookShelf) broker.getObjectByIdentity(
+                broker.serviceIdentity().buildIdentity(BookShelf.class, bookShelf.getPk()));
+        assertNotNull(loadedCopy);
+        assertNotNull(loadedCopy.getItems());
+        assertEquals(2, loadedCopy.getItems().size());
+
+        broker.beginTransaction();
+        /*
+        now we move the unmaterialzed proxy collection from one to another object,
+        it's important to first store the bookshelf object with the nullified items
+        and then the bookshelf with moved item collection proxy - otherwise the PB-api
+        doesn't recognize the changes
+        */
+        bookShelfSecond.setItems(bookShelf.getItems());
+        bookShelf.setItems(null);
+        broker.store(bookShelf, ObjectModification.UPDATE);
+        broker.store(bookShelfSecond, ObjectModification.UPDATE);
+        broker.commitTransaction();
+        broker.clearCache();
+
+        loadedCopy = (BookShelf) broker.getObjectByIdentity(
+                broker.serviceIdentity().buildIdentity(BookShelf.class, bookShelf.getPk()));
+        assertNotNull(loadedCopy);
+        assertNotNull(loadedCopy.getItems());
+        assertEquals(0, loadedCopy.getItems().size());
+
+        BookShelf loadedCopySecond = (BookShelf) broker.getObjectByIdentity(
+                broker.serviceIdentity().buildIdentity(BookShelf.class, bookShelfSecond.getPk()));
+        assertNotNull(loadedCopySecond);
+        assertNotNull(loadedCopySecond.getItems());
+        assertEquals(2, loadedCopySecond.getItems().size());
+
+        broker.clearCache();
+        Criteria criteria = new Criteria();
+        criteria.addLike("name", prefix + "%");
+        Query q = QueryFactory.newQuery(BookShelfItem.class, criteria);
+        Collection items = broker.getCollectionByQuery(q);
+        assertNotNull(items);
+        assertEquals(2, items.size());
+        // we are using collection proxies, so we have to use the interface
+        BookShelfItem item = (BookShelfItem) items.iterator().next();
+        assertNotNull(item.getShelf());
+        BookShelfIF bs = item.getShelf();
+        assertEquals(bookShelfSecond.getPk(), bs.getPk());
+    }
+
     public void testReadProxyCollection() throws Exception
     {
         String name = "testReadProxyCollection_"+System.currentTimeMillis();
@@ -150,7 +268,7 @@
         broker.store(gat);
         broker.commitTransaction();
 
-        Identity oid = new Identity(gat, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gat);
         broker.clearCache();
         Gatherer new_gat = (Gatherer) broker.getObjectByIdentity(oid);
         assertNotNull(new_gat);
@@ -214,7 +332,7 @@
         assertEquals("CollectibleB objects", 4, gatherer.getCollectiblesB().size());
         assertEquals(gatherer.getGatId(), ((CollectibleBIF) gatherer.getCollectiblesB().get(0)).getGathererId());
 
-        Identity oid = new Identity(gatherer, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gatherer);
         broker.clearCache();
         Gatherer new_gatherer = (Gatherer) broker.getObjectByIdentity(oid);
 
@@ -316,7 +434,7 @@
         assertEquals("CollectibleB objects", 4, gatherer.getCollectiblesB().size());
         assertEquals(gatherer.getGatId(), ((CollectibleBIF) gatherer.getCollectiblesB().get(0)).getGathererId());
 
-        Identity oid = new Identity(gatherer, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gatherer);
         broker.clearCache();
         Gatherer new_gatherer = (Gatherer) broker.getObjectByIdentity(oid);
 
@@ -419,7 +537,7 @@
         assertEquals(gatherer.getGatId(), ((CollectibleC2) gatherer.getCollectiblesC2().get(0)).getGathererId());
 
         broker.clearCache();
-        Identity oid = new Identity(gatherer, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gatherer);
         gatherer = (Gatherer) broker.getObjectByIdentity(oid);
         assertNotNull(gatherer);
         // auto-retierve is set false
@@ -436,6 +554,12 @@
         // auto-retieve is false, so get references manually
         broker.retrieveAllReferences(gatherer);
         assertNotNull(gatherer.getCollectiblesC2());
+        List colList = gatherer.getCollectiblesC2();
+        for (Iterator iterator = colList.iterator(); iterator.hasNext();)
+        {
+            // delete all references first
+            broker.delete(iterator.next());
+        }
         broker.delete(gatherer);
         broker.commitTransaction();
 
@@ -472,7 +596,7 @@
         assertEquals("CollectibleDD objects", 3, gatherer.getCollectiblesDD().size());
         assertEquals(gatherer.getGatId(), ((CollectibleDDIF) gatherer.getCollectiblesDD().get(0)).getGathererId());
 
-        Identity oid = new Identity(gatherer, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gatherer);
         broker.clearCache();
         Gatherer new_gatherer = (Gatherer) broker.getObjectByIdentity(oid);
 
@@ -575,7 +699,7 @@
         broker.store(gatherer);
         broker.commitTransaction();
 
-        Identity oid = new Identity(gatherer, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gatherer);
         broker.clearCache();
         Gatherer new_gatherer = (Gatherer) broker.getObjectByIdentity(oid);
 
@@ -629,7 +753,7 @@
         broker.store(gatherer);
         broker.commitTransaction();
 
-        Identity oid = new Identity(gatherer, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gatherer);
         broker.clearCache();
         Gatherer new_gatherer = (Gatherer) broker.getObjectByIdentity(oid);
 
@@ -696,7 +820,7 @@
         assertTrue(gatherer.getCollectiblesC().size() > 0);
         assertEquals(gatherer.getGatId(), ((CollectibleCIF) gatherer.getCollectiblesC().get(0)).getGathererId());
 
-        Identity oid = new Identity(gatherer, broker);
+        Identity oid = broker.serviceIdentity().buildIdentity(gatherer);
         broker.clearCache();
         Gatherer new_gatherer = (Gatherer) broker.getObjectByIdentity(oid);
 
@@ -737,11 +861,11 @@
         broker.store(ev1);
         broker.store(ev2);
         broker.commitTransaction();
-        assertTrue(bookShelf.getPK() != null);
+        assertTrue(bookShelf.getPk() != null);
 
         broker.clearCache();
         BookShelf loadedCopy = (BookShelf) broker.getObjectByIdentity(
-                new Identity(BookShelf.class, BookShelf.class, new Object[]{bookShelf.getPK()}));
+                broker.serviceIdentity().buildIdentity(BookShelf.class, bookShelf.getPk()));
         assertNotNull(loadedCopy);
         assertNotNull(loadedCopy.getItems());
         assertEquals(2, loadedCopy.getItems().size());
@@ -753,9 +877,10 @@
         Collection books = broker.getCollectionByQuery(q);
         assertNotNull(books);
         assertEquals(1, books.size());
-        bookShelf = (BookShelf) books.iterator().next();
-        assertNotNull(bookShelf.getItems());
-        assertEquals("wrong number of items found", 2, bookShelf.getItems().size());
+        // we are using collection proxies, so we have to use the interface
+        BookShelfIF bookShelfIF = (BookShelfIF) books.iterator().next();
+        assertNotNull(bookShelfIF.getItems());
+        assertEquals("wrong number of items found", 2, bookShelfIF.getItems().size());
     }
 
     public void testOneBookShelfQueryByIterator() throws Exception
@@ -774,11 +899,11 @@
         broker.store(ev2);
         broker.commitTransaction();
 
-        assertTrue(bookShelf.getPK() != null);
+        assertTrue(bookShelf.getPk() != null);
 
         broker.clearCache();
         BookShelf loadedCopy = (BookShelf) broker.getObjectByIdentity(
-                new Identity(BookShelf.class, BookShelf.class, new Object[]{bookShelf.getPK()}));
+                broker.serviceIdentity().buildIdentity(BookShelf.class, bookShelf.getPk()));
         assertNotNull(loadedCopy);
         assertNotNull(loadedCopy.getItems());
         assertEquals(2, loadedCopy.getItems().size());
@@ -964,78 +1089,71 @@
 
     private CollectibleBase[] prepareCollectibleBase(String namePrefix)
     {
-        CollectibleBase[] colA = new CollectibleBase[]{
+        return new CollectibleBase[]{
             new CollectibleBase(namePrefix + "_colBase_1"),
             new CollectibleBase(namePrefix + "_colBase_2"),
             new CollectibleBase(namePrefix + "_colBase_3")
         };
-        return colA;
     }
 
     private CollectibleB[] prepareCollectibleB(String namePrefix)
     {
-        CollectibleB[] colB = new CollectibleB[]{
+        return new CollectibleB[]{
             new CollectibleB(namePrefix + "_colB_1"),
             new CollectibleB(namePrefix + "_colB_2"),
             new CollectibleB(namePrefix + "_colB_3"),
             new CollectibleB(namePrefix + "_colB_4")
         };
-        return colB;
     }
 
     private CollectibleC[] prepareCollectibleC(String namePrefix)
     {
-        CollectibleC[] colC = new CollectibleC[]{
+        return new CollectibleC[]{
             new CollectibleC(namePrefix + "_colC_1", "ext1"),
             new CollectibleC(namePrefix + "_colC_2", "ext2"),
             new CollectibleC(namePrefix + "_colC_3", "ext3"),
             new CollectibleC(namePrefix + "_colC_4", "ext4"),
             new CollectibleC(namePrefix + "_colC_5", "ext5")
         };
-        return colC;
     }
 
     private CollectibleCC[] prepareCollectibleCC(String namePrefix)
     {
-        CollectibleCC[] colCC = new CollectibleCC[]{
+        return new CollectibleCC[]{
             new CollectibleCC(namePrefix + "_colCC_1", "ext1"),
             new CollectibleCC(namePrefix + "_colCC_2", "ext2"),
             new CollectibleCC(namePrefix + "_colCC_3", "ext3"),
             new CollectibleCC(namePrefix + "_colCC_4", "ext4"),
             new CollectibleCC(namePrefix + "_colCC_5", "ext5")
         };
-        return colCC;
     }
 
     private CollectibleC2[] prepareCollectibleC2(String namePrefix)
     {
-        CollectibleC2[] colCC = new CollectibleC2[]{
+        return new CollectibleC2[]{
             new CollectibleC2(namePrefix + "_colC2_1", "ext1"),
             new CollectibleC2(namePrefix + "_colC2_2", "ext2"),
             new CollectibleC2(namePrefix + "_colC2_3", "ext3"),
             new CollectibleC2(namePrefix + "_colC2_4", "ext4"),
             new CollectibleC2(namePrefix + "_colC2_5", "ext5")
         };
-        return colCC;
     }
 
     private CollectibleD[] prepareCollectibleD(String namePrefix)
     {
-        CollectibleD[] colD = new CollectibleD[]{
+        return new CollectibleD[]{
             new CollectibleD(namePrefix + "_colD_1"),
             new CollectibleD(namePrefix + "_colD_2"),
         };
-        return colD;
     }
 
     private CollectibleDD[] prepareCollectibleDD(String namePrefix)
     {
-        CollectibleDD[] colDD = new CollectibleDD[]{
+        return new CollectibleDD[]{
             new CollectibleDD(namePrefix + "_colDD_1"),
             new CollectibleDD(namePrefix + "_colDD_2"),
             new CollectibleDD(namePrefix + "_colDD_3")
         };
-        return colDD;
     }
 
 
@@ -1454,8 +1572,18 @@
         }
     }
 
+    public static interface BookShelfIF
+    {
+        public void addItem(BookShelfItem event);
+        public List getItems();
+        public Integer getPk();
+        public void setPk(Integer pk);
+        public String getName();
+        public void setName(String name);
+    }
+
 
-    public static class BookShelf
+    public static class BookShelf implements BookShelfIF
     {
         private Integer pk;
         private String name;
@@ -1470,11 +1598,6 @@
             this.name = name;
         }
 
-        public Integer getPK()
-        {
-            return pk;
-        }
-
         public void addItem(BookShelfItem event)
         {
             if (items == null)
@@ -1483,6 +1606,11 @@
             items.add(event);
         }
 
+        public void setItems(List items)
+        {
+            this.items = items;
+        }
+
         public List getItems()
         {
             return items;
@@ -1512,14 +1640,21 @@
     public static abstract class BookShelfItem
     {
         private Integer pk;
-        private BookShelf shelf;
+        private String name;
+        private BookShelfIF shelf;
 
         public BookShelfItem()
         {
         }
 
-        public BookShelfItem(BookShelf shelf)
+        public BookShelfItem(BookShelfIF shelf)
+        {
+            this.shelf = shelf;
+        }
+
+        protected BookShelfItem(String name, BookShelfIF shelf)
         {
+            this.name = name;
             this.shelf = shelf;
         }
 
@@ -1533,12 +1668,22 @@
             this.pk = pk;
         }
 
-        public BookShelf getShelf()
+        public String getName()
+        {
+            return name;
+        }
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public BookShelfIF getShelf()
         {
             return shelf;
         }
 
-        public void setShelf(BookShelf shelf)
+        public void setShelf(BookShelfIF shelf)
         {
             this.shelf = shelf;
         }
@@ -1554,6 +1699,11 @@
         {
             super(shelf);
         }
+
+        public DVD(String name, BookShelfIF shelf)
+        {
+            super(name, shelf);
+        }
     }
 
     public static class Book extends BookShelfItem
@@ -1562,9 +1712,77 @@
         {
         }
 
-        public Book(BookShelf shelf)
+        public Book(BookShelfIF shelf)
         {
             super(shelf);
+        }
+
+        public Book(String name, BookShelfIF shelf)
+        {
+            super(name, shelf);
+        }
+    }
+
+     public static class Candie
+    {
+        private Integer pk;
+        private String name;
+        private String ingredients;
+        private BookShelfIF shelf;
+
+        public Candie()
+        {
+        }
+
+        public Candie(BookShelfIF shelf)
+        {
+            this.shelf = shelf;
+        }
+
+        protected Candie(String name, BookShelfIF shelf)
+        {
+            this.name = name;
+            this.shelf = shelf;
+        }
+
+        public Integer getPk()
+        {
+            return pk;
+        }
+
+        public void setPk(Integer pk)
+        {
+            this.pk = pk;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public String getIngredients()
+        {
+            return ingredients;
+        }
+
+        public void setIngredients(String ingredients)
+        {
+            this.ingredients = ingredients;
+        }
+
+        public BookShelfIF getShelf()
+        {
+            return shelf;
+        }
+
+        public void setShelf(BookShelfIF shelf)
+        {
+            this.shelf = shelf;
         }
     }
 }

Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest2.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest2.java?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest2.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/CollectionTest2.java Sat Jul 15 07:38:14 2006
@@ -1,6 +1,7 @@
 package org.apache.ojb.broker;
 
 import java.io.Serializable;
+import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
@@ -48,6 +49,46 @@
         super.tearDown();
     }
 
+    public void testQueryJoinOneToN() throws Exception
+    {
+        String name = "testQueryJoinOneToN_" + System.currentTimeMillis();
+
+        changeAutoSetting(Project.class, "subProjects", true, true, false, false);
+        changeAutoSetting(Project.class, "subProject_2s", true, true, false, false);
+        changeAutoSetting(Project.class, "developers", true, true, false, false);
+        changeAutoSetting(SubProject.class, "project", true, true, false, false);
+
+        Project project = new Project(name, null, null);
+
+        Timestamp t1 = new Timestamp(System.currentTimeMillis());
+        Timestamp t2 = new Timestamp(t1.getTime() + 1);
+        broker.beginTransaction();
+        // first store the project to assign the PK
+        broker.store(project);
+
+        // now we can use the project id as part of the compounded SubProject_2 PK (id, date)
+        SubProject_2 sub_1 = new SubProject_2(project.getId(), t1, name + "_dvd", project);
+        SubProject_2 sub_2 = new SubProject_2(project.getId(), t2, name + "_book", project);
+        project.addSubProject_2(sub_1);
+        project.addSubProject_2(sub_2);
+        broker.store(project);
+
+        broker.commitTransaction();
+
+        broker.beginTransaction();
+        broker.clearCache();
+        Criteria criteria = new Criteria();
+        criteria.addBetween("subProject_2s.date", new Timestamp(t1.getTime() - 1), new Timestamp(t2.getTime() + 1));
+        Query q = QueryFactory.newQuery(Project.class, criteria, true);
+        Collection projects = broker.getCollectionByQuery(q);
+        assertNotNull(projects);
+        assertEquals(1, projects.size());
+        Project newProject = (Project) projects.iterator().next();
+        assertNotNull(newProject.getSubProjects());
+        assertEquals(2, newProject.getSubProject_2s().size());
+    }
+
+
     public void testAutoUpdateDeleteSettings()
     {
         changeAutoSetting(Project.class, "subProjects", false, false, false, false);
@@ -285,7 +326,6 @@
 
         Identity proOid = broker.serviceIdentity().buildIdentity(pro);
         Project newPro = (Project) broker.getObjectByIdentity(proOid);
-
         assertNotNull(newPro.getDevelopers());
         assertNotNull(newPro.getSubProjects());
         assertEquals(2, newPro.getDevelopers().size());
@@ -751,9 +791,8 @@
         result = broker.getCollectionByQuery(queryByDeveloper);
         assertEquals(2, result.size());
 
-        // generates INNER joins between COL_2_SUB_PROJECT_SELF and COL_2_SUB_PROJECT_SELF and COL_2_DEVELOPER_SELF 
-        QueryByCriteria queryBySubDeveloper = createQueryFor(SubProjectSelfRef.class, "subProjects.developers.name",
-                dev3.getName());
+        // generates OUTER joins between COL_2_SUB_PROJECT_SELF and COL_2_SUB_PROJECT_SELF and COL_2_DEVELOPER_SELF
+        QueryByCriteria queryBySubDeveloper = createQueryFor(SubProjectSelfRef.class, "subProjects.developers.name", dev3.getName());
         queryBySubDeveloper.setDistinct(true);
         result = broker.getCollectionByQuery(queryBySubDeveloper);
         assertEquals(1, result.size());
@@ -824,6 +863,7 @@
         private Integer id;
         private String name;
         private List subProjects;
+        private List subProject_2s;
         private Collection developers;
 
         public Project()
@@ -867,6 +907,34 @@
             this.subProjects = subProjects;
         }
 
+        public void addSubProject(SubProjectIF subProject)
+        {
+            if(subProjects == null)
+            {
+                subProjects = new ArrayList();
+            }
+            subProjects.add(subProject);
+        }
+
+        public List getSubProject_2s()
+        {
+            return subProject_2s;
+        }
+
+        public void setSubProject_2s(List subProject_2s)
+        {
+            this.subProject_2s = subProject_2s;
+        }
+
+        public void addSubProject_2(SubProject_2 subProject2)
+        {
+            if(subProject_2s == null)
+            {
+                subProject_2s = new ArrayList();
+            }
+            subProject_2s.add(subProject2);
+        }
+
         public Collection getDevelopers()
         {
             return developers;
@@ -886,6 +954,7 @@
         public void setName(String name);
         public List getSubProjects();
         public void setSubProjects(List subProjects);
+        public void addSubProject(SubProjectIF subProject);
         public Collection getDevelopers();
         public void setDevelopers(Collection developers);
     }
@@ -937,16 +1006,6 @@
         }
     }
 
-    public static interface SubProjectIF extends Serializable
-    {
-        public Integer getId();
-        public void setId(Integer id);
-        public String getName();
-        public void setName(String name);
-        public ProjectIF getProject();
-        public void setProject(ProjectIF project);
-    }
-
     public static class SubProjectSelfRef
     {
         private Integer id;
@@ -983,28 +1042,103 @@
             this.name = name;
         }
 
-        private Collection getDevelopers()
+        public List getSubProjects()
+        {
+            return subProjects;
+        }
+
+        public void setSubProjects(List subProjects)
+        {
+            this.subProjects = subProjects;
+        }
+
+        public Collection getDevelopers()
         {
             return developers;
         }
 
-        private void setDevelopers(Collection developers)
+        public void setDevelopers(Collection developers)
         {
             this.developers = developers;
         }
+    }
 
-        private List getSubProjects()
+    public static class SubProject_2
+        {
+        private Integer id;
+        private Timestamp date;
+        private String name;
+        private ProjectIF project;
+
+        public SubProject_2()
         {
-            return subProjects;
         }
 
-        private void setSubProjects(List subProjects)
+        public SubProject_2(Integer id, Timestamp date)
         {
-            this.subProjects = subProjects;
+            this.id = id;
+            this.date = date;
         }
+
+        public SubProject_2(Integer id, Timestamp date, String name, ProjectIF project)
+        {
+            this.id = id;
+            this.date = date;
+            this.name = name;
+            this.project = project;
     }
     
-   
+        public Integer getId()
+        {
+            return id;
+        }
+
+        public void setId(Integer id)
+        {
+            this.id = id;
+        }
+
+        public Timestamp getDate()
+        {
+            return date;
+        }
+
+        public void setDate(Timestamp date)
+        {
+            this.date = date;
+        }
+
+        public String getName()
+        {
+            return name;
+        }
+
+        public void setName(String name)
+        {
+            this.name = name;
+        }
+
+        public ProjectIF getProject()
+        {
+            return project;
+        }
+
+        public void setProject(ProjectIF project)
+        {
+            this.project = project;
+        }
+    }
+
+    public static interface SubProjectIF extends Serializable
+    {
+        public Integer getId();
+        public void setId(Integer id);
+        public String getName();
+        public void setName(String name);
+        public ProjectIF getProject();
+        public void setProject(ProjectIF project);
+    }
+
     public static class Developer implements Serializable
     {
         private Integer id;

Modified: db/ojb/trunk/src/test/org/apache/ojb/broker/Container.java
URL: http://svn.apache.org/viewvc/db/ojb/trunk/src/test/org/apache/ojb/broker/Container.java?rev=422236&r1=422235&r2=422236&view=diff
==============================================================================
--- db/ojb/trunk/src/test/org/apache/ojb/broker/Container.java (original)
+++ db/ojb/trunk/src/test/org/apache/ojb/broker/Container.java Sat Jul 15 07:38:14 2006
@@ -37,19 +37,54 @@
         this.name = name;
 	}
 
+    public Integer getId()
+    {
+        return id;
+    }
+
+    public void setId(Integer id)
+    {
+        this.id = id;
+    }
+
+    public Integer getParentId()
+    {
+        return parentId;
+    }
+
+    public void setParentId(Integer parentId)
+    {
+        this.parentId = parentId;
+    }
+
     public String getName()
     {
         return name;
     }
 
-    public List getChildren()
+    public void setName(String name)
     {
-        return children;
+        this.name = name;
     }
 
     public Container getParent()
     {
         return parent;
+    }
+
+    public void setParent(Container parent)
+    {
+        this.parent = parent;
+    }
+
+    public List getChildren()
+    {
+        return children;
+    }
+
+    public void setChildren(List children)
+    {
+        this.children = children;
     }
 
     public void addChild(Container child)



---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org