You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-user@db.apache.org by JUliSys <ju...@web.de> on 2003/08/08 11:55:46 UTC

PROBLEM: same table name in different databases

Hi all,

I have a problem using the PersistanceBroker API in ojb-1.0.rc4.

I tried to reduce the problem to a simple example as follows:

I'm using two different databases. From one database (db-source) I'm 
reading data, then I process it in some way before I store it in the 
second database (db-dest).

The data in db-source is stored in a table with the same name as in 
db-dest (example: person), but the format is different (example: 
birthday in db-source, but age in db-dest).

The person in db-source is mapped (see repository.xml below) to the 
class ojbtest.PersonSource and the person in db-dest is mapped to the 
class ojbtest.PersonDest. These classes are implemented as simple as it 
would be expected.

When I try to read one PersonDest from db-dest, ojb assembles an SQL 
command (see below) that tries to read also fields (A0.birthday) from 
PersonSource which are not defined in PersonDest.

My questions:
- Is there a way that ojb allows the same table name
   in multiple different databases?
- Is this an error in ojb or am I doing something wrong?

TIA
julisys



This is the SQL command that is assembled by ojb:
--------------------------------------------------------------------
SELECT A0.age,A0.name,A0.id,A0.birthday
   FROM person A0
   WHERE A0.id =  ?
--------------------------------------------------------------------

Here comes the repository.xml:
--------------------------------------------------------------------

<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE descriptor-repository PUBLIC
        "-//Apache Software Foundation//DTD OJB Repository//EN"
        "repository.dtd"
[
<!ENTITY internal SYSTEM "repository_internal.xml">
]>


<descriptor-repository version="1.0" isolation-level="read-uncommitted">
   <jdbc-connection-descriptor jcd-alias="db-source"
         default-connection="false" platform="Sapdb" jdbc-level="3.0"
         driver="com.sap.dbtech.jdbc.DriverSapDB"
         protocol="jdbc" subprotocol="sapdb" dbalias="//teapp/calendar"
         username="mm" password="mm"
         eager-release="false" batch-mode="false"
         useAutoCommit="1" ignoreAutoCommitExceptions="false">
       <connection-pool maxActive="21" validationQuery="" />
   </jdbc-connection-descriptor>

   <jdbc-connection-descriptor jcd-alias="db-dest"
          default-connection="true" platform="Sapdb" jdbc-level="3.0"
          driver="com.sap.dbtech.jdbc.DriverSapDB"
          protocol="jdbc" subprotocol="sapdb" dbalias="//teapp/newsdev"
          username="news" password="news"
          eager-release="false" batch-mode="false"
          useAutoCommit="1" ignoreAutoCommitExceptions="false">
       <connection-pool maxActive="21" validationQuery="" />
   </jdbc-connection-descriptor>

   &internal;

   <class-descriptor class="ojbtest.PersonSource" table="person">
       <field-descriptor name="id" column="id" jdbc-type="INTEGER"
                         primarykey="true" autoincrement="true"/>
       <field-descriptor name="name" column="name" jdbc-type="INTEGER"/>
       <field-descriptor name="birthday" column="birthday"
                         jdbc-type="DATE"/>
   </class-descriptor>

   <class-descriptor class="ojbtest.PersonDest" table="person">
       <field-descriptor name="id" column="id" jdbc-type="INTEGER"
                         primarykey="true" autoincrement="true"/>
       <field-descriptor name="name" column="name" jdbc-type="INTEGER"/>
       <field-descriptor name="age" column="age" jdbc-type="INTEGER"/>
   </class-descriptor>
</descriptor-repository>

--------------------------------------------------------------------


And this is the code that reads a PersonSource from db-source:
--------------------------------------------------------------------

package ojbtest;

import org.apache.ojb.broker.*;
import org.apache.ojb.broker.query.*;

import java.util.Iterator;

public class OjbTest {
     public static void main(String[] args) {
         PBKey pbKey;
         PersistenceBroker persistenceBroker;
         Query query;
         Iterator iterator;

         try {
             pbKey = new PBKey("db-dest");
             persistenceBroker = 
PersistenceBrokerFactory.createPersistenceBroker(pbKey);
             Criteria criteria = new Criteria();
             criteria.addEqualTo("id", new Integer(1));
             query = new QueryByCriteria(PersonDest.class, criteria);
             iterator = persistenceBroker.getIteratorByQuery(query);
             if (iterator.hasNext()) {
                 PersonDest person = (PersonDest) iterator.next();
                 System.out.println(person);
             }
             persistenceBroker.close();
         }
         catch (Exception exception) {
             exception.printStackTrace();
         }
     }
}


--------------------------------------------------------------------



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