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 2004/06/12 15:43:12 UTC
cvs commit: db-ojb/src/test/org/apache/ojb repository_junit_reference.xml
arminw 2004/06/12 06:43:12
Modified: src/test/org/apache/ojb/broker AllTests.java
src/test/org/apache/ojb repository_junit_reference.xml
Added: src/test/org/apache/ojb/broker PrimaryKeyForeignKeyTest.java
Log:
add new test use the PK field of an object as FK to
a referenced object
Revision Changes Path
1.47 +1 -0 db-ojb/src/test/org/apache/ojb/broker/AllTests.java
Index: AllTests.java
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/AllTests.java,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- AllTests.java 4 Jun 2004 16:02:44 -0000 1.46
+++ AllTests.java 12 Jun 2004 13:43:12 -0000 1.47
@@ -95,6 +95,7 @@
suite.addTestSuite(NumberAccuracyTest.class);
suite.addTestSuite(AutoIncrementTest.class);
suite.addTestSuite(PathTest.class);
+ suite.addTestSuite(PrimaryKeyForeignKeyTest.class);
return suite;
}
1.1 db-ojb/src/test/org/apache/ojb/broker/PrimaryKeyForeignKeyTest.java
Index: PrimaryKeyForeignKeyTest.java
===================================================================
package org.apache.ojb.broker;
import java.util.Collection;
import org.apache.ojb.broker.core.proxy.ProxyHelper;
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.junit.PBTestCase;
/**
* Test case for checking the management of references, handling of PK used as FK too.
* In this test the PK of {@link org.apache.ojb.broker.PrimaryKeyForeignKeyTest.Person}
* is a FK to {@link org.apache.ojb.broker.PrimaryKeyForeignKeyTest.PersonDetail} too.
*
* Person has a reference to PersonDetail, the PK of Person is the FK to PersonDetail too!!
* PersonDetail PK is not autoincremented we have to set the PK of Person
*
* NOTE: Don't change metadata in production environments in such a way. All made changes are global
* changes and visible to all threads.
*
* @author <a href="mailto:armin@codeAuLait.de">Armin Waibel</a>
* @version $Id: PrimaryKeyForeignKeyTest.java,v 1.1 2004/06/12 13:43:12 arminw Exp $
*/
public class PrimaryKeyForeignKeyTest extends PBTestCase
{
public static void main(String[] args)
{
String[] arr = {PrimaryKeyForeignKeyTest.class.getName()};
junit.textui.TestRunner.main(arr);
}
public void tearDown()
{
try
{
if(broker != null)
{
changeRepositoryAutoSetting(Person.class, "detail", true, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
changeRepositoryAutoSetting(PersonDetail.class, "person", false, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
changeRepositoryAutoSetting(PersonDetail.class, "gender", true, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
}
}
finally
{
super.tearDown();
}
}
public void testStoreLookup()
{
changeRepositoryAutoSetting(Person.class, "detail", true, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
changeRepositoryAutoSetting(PersonDetail.class, "person", false, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
changeRepositoryAutoSetting(PersonDetail.class, "gender", true, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, false);
String postfix = "_" + System.currentTimeMillis();
broker.beginTransaction();
Person jeff = new Person("jeff" + postfix, null);
// store Person first to assign PK, needed to set PK in PersonDetail
broker.store(jeff);
GenderIF gender = new Gender("male"+postfix);
PersonDetailIF jeffDetail = new PersonDetail(jeff.getId(), "profile"+postfix, jeff, gender);
broker.store(gender);
broker.serviceBrokerHelper().link(jeffDetail, true);
broker.store(jeffDetail);
// now we can assign reference
jeff.setDetail(jeffDetail);
broker.store(jeff);
broker.commitTransaction();
broker.clearCache();
Criteria crit = new Criteria();
crit.addEqualTo("name", "jeff" + postfix);
Query query = QueryFactory.newQuery(Person.class, crit);
Collection result = broker.getCollectionByQuery(query);
assertEquals(1, result.size());
Person jeffNew = (Person) result.iterator().next();
assertEquals("jeff" + postfix, jeffNew.getName());
assertNotNull(jeffNew.getDetail());
assertFalse(ProxyHelper.isProxy(jeffNew.getDetail()));
PersonDetailIF jeffNewDetail = jeffNew.getDetail();
assertNotNull(jeffNewDetail.getGender());
assertEquals("male"+postfix, jeffNewDetail.getGender().getType());
broker.beginTransaction();
broker.delete(jeffNew);
GenderIF g = jeffNewDetail.getGender();
broker.delete(jeffNewDetail);
broker.delete(g);
broker.commitTransaction();
}
public void testStoreLookupProxy()
{
changeRepositoryAutoSetting(Person.class, "detail", true, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, true);
changeRepositoryAutoSetting(PersonDetail.class, "person", false, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, true);
changeRepositoryAutoSetting(PersonDetail.class, "gender", true, ObjectReferenceDescriptor.CASCADE_NONE, ObjectReferenceDescriptor.CASCADE_NONE, true);
String postfix = "_" + System.currentTimeMillis();
broker.beginTransaction();
Person jeff = new Person("jeff" + postfix, null);
// store Person first to assign PK, needed to set PK in PersonDetail
broker.store(jeff);
GenderIF gender = new Gender("male"+postfix);
PersonDetailIF jeffDetail = new PersonDetail(jeff.getId(), "profile"+postfix, jeff, gender);
broker.store(gender);
broker.serviceBrokerHelper().link(jeffDetail, true);
broker.store(jeffDetail);
// now we can assign reference
jeff.setDetail(jeffDetail);
broker.store(jeff);
broker.commitTransaction();
broker.clearCache();
Criteria crit = new Criteria();
crit.addEqualTo("name", "jeff" + postfix);
Query query = QueryFactory.newQuery(Person.class, crit);
Collection result = broker.getCollectionByQuery(query);
assertEquals(1, result.size());
Person jeffNew = (Person) result.iterator().next();
assertEquals("jeff" + postfix, jeffNew.getName());
assertNotNull(jeffNew.getDetail());
assertTrue(ProxyHelper.isProxy(jeffNew.getDetail()));
PersonDetailIF jeffNewDetail = jeffNew.getDetail();
assertNotNull(jeffNewDetail.getGender());
assertTrue(ProxyHelper.isProxy(jeffNewDetail.getGender()));
assertEquals("male"+postfix, jeffNewDetail.getGender().getType());
broker.beginTransaction();
broker.delete(jeffNew);
GenderIF g = jeffNewDetail.getGender();
broker.delete(jeffNewDetail);
broker.delete(g);
broker.commitTransaction();
}
public void testStoreLookup_2()
{
changeRepositoryAutoSetting(Person.class, "detail", true, ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, false);
changeRepositoryAutoSetting(PersonDetail.class, "person", false, ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, false);
changeRepositoryAutoSetting(PersonDetail.class, "gender", true, ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, false);
String postfix = "_" + System.currentTimeMillis();
broker.beginTransaction();
Person jeff = new Person("jeff" + postfix, null);
// store Person first to assign PK, needed to set PK in PersonDetail
broker.store(jeff);
GenderIF gender = new Gender("male"+postfix);
PersonDetailIF jeffDetail = new PersonDetail(jeff.getId(), "profile"+postfix, jeff, gender);
broker.store(jeffDetail);
// now we can assign reference
jeff.setDetail(jeffDetail);
broker.store(jeff);
broker.commitTransaction();
broker.clearCache();
Criteria crit = new Criteria();
crit.addEqualTo("name", "jeff" + postfix);
Query query = QueryFactory.newQuery(Person.class, crit);
Collection result = broker.getCollectionByQuery(query);
assertEquals(1, result.size());
Person jeffNew = (Person) result.iterator().next();
assertEquals("jeff" + postfix, jeffNew.getName());
assertNotNull(jeffNew.getDetail());
assertFalse(ProxyHelper.isProxy(jeffNew.getDetail()));
PersonDetailIF jeffNewDetail = jeffNew.getDetail();
assertNotNull(jeffNewDetail.getGender());
assertEquals("male"+postfix, jeffNewDetail.getGender().getType());
broker.beginTransaction();
broker.delete(jeffNew);
GenderIF g = jeffNewDetail.getGender();
broker.delete(jeffNewDetail);
broker.delete(g);
broker.commitTransaction();
}
public void testStoreLookupProxy_2()
{
changeRepositoryAutoSetting(Person.class, "detail", true, ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, true);
changeRepositoryAutoSetting(PersonDetail.class, "person", false, ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, true);
changeRepositoryAutoSetting(PersonDetail.class, "gender", true, ObjectReferenceDescriptor.CASCADE_OBJECT, ObjectReferenceDescriptor.CASCADE_OBJECT, true);
String postfix = "_" + System.currentTimeMillis();
broker.beginTransaction();
Person jeff = new Person("jeff" + postfix, null);
// store Person first to assign PK, needed to set PK in PersonDetail
broker.store(jeff);
GenderIF gender = new Gender("male"+postfix);
PersonDetailIF jeffDetail = new PersonDetail(jeff.getId(), "profile"+postfix, jeff, gender);
broker.store(jeffDetail);
// now we can assign reference
jeff.setDetail(jeffDetail);
broker.store(jeff);
broker.commitTransaction();
broker.clearCache();
Criteria crit = new Criteria();
crit.addEqualTo("name", "jeff" + postfix);
Query query = QueryFactory.newQuery(Person.class, crit);
Collection result = broker.getCollectionByQuery(query);
assertEquals(1, result.size());
Person jeffNew = (Person) result.iterator().next();
assertEquals("jeff" + postfix, jeffNew.getName());
assertNotNull(jeffNew.getDetail());
assertTrue(ProxyHelper.isProxy(jeffNew.getDetail()));
PersonDetailIF jeffNewDetail = jeffNew.getDetail();
assertNotNull(jeffNewDetail.getGender());
assertTrue(ProxyHelper.isProxy(jeffNewDetail.getGender()));
assertEquals("male"+postfix, jeffNewDetail.getGender().getType());
broker.beginTransaction();
broker.delete(jeffNew);
GenderIF g = jeffNewDetail.getGender();
broker.delete(jeffNewDetail);
broker.delete(g);
broker.commitTransaction();
}
private void changeRepositoryAutoSetting(Class clazz, String attributeName, boolean retrieve, int update, int delete, boolean proxy)
{
ClassDescriptor cld = broker.getClassDescriptor(clazz);
ObjectReferenceDescriptor ord = cld.getObjectReferenceDescriptorByName(attributeName);
ord.setCascadeRetrieve(retrieve);
ord.setCascadingStore(update);
ord.setCascadingDelete(delete);
ord.setLazy(proxy);
}
public static class Person
{
Integer id;
String name;
PersonDetailIF detail;
public Person()
{
}
public Person(String name, PersonDetailIF detail)
{
this.name = name;
this.detail = detail;
}
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public PersonDetailIF getDetail()
{
return detail;
}
public void setDetail(PersonDetailIF detail)
{
this.detail = detail;
}
}
public static interface PersonDetailIF
{
public Integer getId();
public void setId(Integer id);
public String getProfile();
public void setProfile(String profile);
public Person getPerson();
public void setPerson(Person person);
public GenderIF getGender();
public void setGender(GenderIF person);
}
public static class PersonDetail implements PersonDetailIF
{
Integer id;
String profile;
Person person;
GenderIF gender;
public PersonDetail()
{
}
public PersonDetail(Integer id, String profile, Person person, GenderIF gender)
{
this.id = id;
this.profile = profile;
this.person = person;
this.gender = gender;
}
public Integer getId()
{
return id;
}
public void setId(Integer id)
{
this.id = id;
}
public String getProfile()
{
return profile;
}
public void setProfile(String profile)
{
this.profile = profile;
}
public Person getPerson()
{
return person;
}
public void setPerson(Person person)
{
this.person = person;
}
public GenderIF getGender()
{
return gender;
}
public void setGender(GenderIF gender)
{
this.gender = gender;
}
}
public static interface GenderIF
{
public String getType();
public void setType(String type);
}
public static class Gender implements GenderIF
{
String type;
public Gender()
{
}
public Gender(String type)
{
this.type = type;
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
}
}
1.14 +95 -1 db-ojb/src/test/org/apache/ojb/repository_junit_reference.xml
Index: repository_junit_reference.xml
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/repository_junit_reference.xml,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- repository_junit_reference.xml 22 May 2004 16:23:45 -0000 1.13
+++ repository_junit_reference.xml 12 Jun 2004 13:43:12 -0000 1.14
@@ -579,6 +579,100 @@
</class-descriptor>
+<!-- ************************************************* -->
+<!-- PrimaryKeyForeignKeyTest - PB-api -->
+<!-- ************************************************* -->
+ <class-descriptor
+ class="org.apache.ojb.broker.PrimaryKeyForeignKeyTest$Person"
+ table="PKFK_PERSON">
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="true"
+ />
+
+ <field-descriptor
+ name="name"
+ column="NAME"
+ jdbc-type="VARCHAR"
+ />
+
+ <reference-descriptor
+ name="detail"
+ class-ref="org.apache.ojb.broker.PrimaryKeyForeignKeyTest$PersonDetail"
+ proxy="false"
+ auto-retrieve="true"
+ auto-update="false"
+ auto-delete="false">
+ <foreignkey field-ref="id"/>
+ </reference-descriptor>
+ </class-descriptor>
+
+ <class-descriptor
+ class="org.apache.ojb.broker.PrimaryKeyForeignKeyTest$PersonDetail"
+ table="PKFK_PERSON_DETAIL">
+
+ <field-descriptor
+ name="id"
+ column="OBJ_ID"
+ jdbc-type="INTEGER"
+ primarykey="true"
+ autoincrement="false"
+ />
+
+ <field-descriptor
+ name="profile"
+ column="PROFILE"
+ jdbc-type="VARCHAR"
+ />
+
+ <field-descriptor
+ name="fkGender"
+ column="FK_GENDER"
+ jdbc-type="VARCHAR"
+ primarykey="false"
+ autoincrement="false"
+ access="anonymous"
+ />
+
+ <reference-descriptor
+ name="gender"
+ class-ref="org.apache.ojb.broker.PrimaryKeyForeignKeyTest$Gender"
+ proxy="false"
+ auto-retrieve="true"
+ auto-update="false"
+ auto-delete="false">
+ <foreignkey field-ref="fkGender"/>
+ </reference-descriptor>
+
+ <reference-descriptor
+ name="person"
+ class-ref="org.apache.ojb.broker.PrimaryKeyForeignKeyTest$Person"
+ proxy="false"
+ auto-retrieve="true"
+ auto-update="false"
+ auto-delete="false">
+ <foreignkey field-ref="id"/>
+ </reference-descriptor>
+ </class-descriptor>
+
+ <class-descriptor
+ class="org.apache.ojb.broker.PrimaryKeyForeignKeyTest$Gender"
+ table="PKFK_GENDER">
+
+ <field-descriptor
+ name="type"
+ column="TYPE"
+ jdbc-type="VARCHAR"
+ primarykey="true"
+ autoincrement="false"
+ />
+ </class-descriptor>
+
+
<!-- ************************************************* -->
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org