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 Steve Schwarz <sa...@hotmail.com> on 2004/07/17 00:20:02 UTC
ODMG Not Instantiating Joined Data Member
Hi
I'm using 1.0.rc6 and I must have something misconfigured. I'm loading a
class Login which contains (has-a) instance of Contact. I retrieve the Login
fine but the Contact is always null.
repository.xml
<!-- Definitions for Login -->
<class-descriptor class="org.apache.cocoon.ojb.samples.bean.Login"
table="login">
<!-- actual data members of this class -->
<field-descriptor name="_login" column="login" jdbc-type="VARCHAR"
primarykey="true"/>
<field-descriptor name="_password" column="password" jdbc-type="VARCHAR"
nullable="false"/>
<!-- anonymous doesn't exist in class itself used as join to Contact table
-->
<field-descriptor name="contactId" column="id"
jdbc-type="VARCHAR" nullable="true" access="anonymous"/>
<!-- implement the join with the Contact table -->
<reference-descriptor name="_contact"
class-ref="org.apache.cocoon.ojb.samples.bean.Contact">
<foreignkey field-ref="contactId"/>
</reference-descriptor>
</class-descriptor>
<class-descriptor class="org.apache.cocoon.ojb.samples.bean.Contact"
table="contact">
<!-- id is join id with Login table -->
<field-descriptor name="_id" column="id"
jdbc-type="VARCHAR" nullable="false"
primarykey="true"/>
<field-descriptor name="_honorific" column="honorific"
jdbc-type="VARCHAR" nullable="true"/>
<field-descriptor name="_firstName" column="firstName"
jdbc-type="VARCHAR" nullable="false"/>
<field-descriptor name="_otherName" column="otherName"
jdbc-type="VARCHAR" nullable="true"/>
<field-descriptor name="_surname" column="surname"
jdbc-type="VARCHAR" nullable="false"/>
<field-descriptor name="_lineage" column="lineage"
jdbc-type="VARCHAR" nullable="true"/>
<field-descriptor name="_email" column="email"
jdbc-type="VARCHAR" nullable="false"/>
<field-descriptor name="_website" column="website"
jdbc-type="VARCHAR" nullable="true"/>
<field-descriptor name="_country" column="country"
jdbc-type="VARCHAR" nullable="true"/>
<field-descriptor name="_countrySubElement" column="countrySubElement"
jdbc-type="VARCHAR" nullable="true"/>
<field-descriptor name="_city" column="city"
jdbc-type="VARCHAR" nullable="true"/>
</class-descriptor>
I load the Login as follows:
// omitted code above
org.odmg.Transaction tx = impl.newTransaction();
try {
tx.begin();
// 2. get an OQLQuery object from the ODMG facade
OQLQuery query = impl.newOQLQuery();
// 3. set the OQL select statement
query.create("select one from " + Login.class.getName() +
" where login = $1 and password= $2");
// query using incoming bean login field value
query.bind(bean.getLogin());
query.bind(bean.getPassword());
try {
DList results = (DList) query.execute();
try {
// get the data if any
bean = (Login) results.iterator().next();
}
catch (IndexOutOfBoundsException ex) {
return false;
}
}
catch (QueryException ex) {
return false;
}
tx.commit();
// more omitted code
With trace on it looks like it is finding both my Login instance and locking
the Contact instance (with id=1) but I never see the select to load the
Contact instance.
[org.apache.ojb.odmg.TransactionImpl] DEBUG: Begin transaction was called on
tx org.apache.ojb.odmg.TransactionImpl@128341, with associated PB null
[org.apache.ojb.odmg.oql.OQLQueryImpl] DEBUG: create query for query-string:
select one from org.apache.cocoon.ojb.samples.bean.Login where login = $1
and password= $2
[org.apache.ojb.odmg.oql.OQLQueryImpl] DEBUG: Start execute query
[org.apache.ojb.broker.core.QueryReferenceBroker] DEBUG:
getCollectionByQuery (class org.apache.ojb.odmg.collections.DListImpl_2,
class org.apache.cocoon.ojb.samples.bean.Login, Query from class
org.apache.cocoon.ojb.samples.bean.Login where [login = f@foo.com, [password
= 123456]])
[org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias] DEBUG:
TableAlias(): using hints ? false
[org.apache.ojb.broker.accesslayer.sql.SqlQueryStatement$TableAlias] DEBUG:
TableAlias(): using hints ? false
[org.apache.ojb.odmg.TransactionImpl] DEBUG: lock object was called on tx
org.apache.ojb.odmg.TransactionImpl@128340
[org.apache.ojb.odmg.TransactionImpl] DEBUG: proceeding with lock on class:
org.apache.cocoon.ojb.samples.bean.Login object
org.apache.cocoon.ojb.samples.bean.Login@1ea817f
[org.apache.ojb.odmg.locking.LockManagerDefaultImpl] DEBUG:
LM.readLock(tx-127.0.0.1:988707:fdc9bbf600:-7fff,
org.apache.cocoon.ojb.samples.bean.Login{f@foo.com})
[org.apache.ojb.odmg.TransactionImpl] DEBUG: lock object was called on tx
org.apache.ojb.odmg.TransactionImpl@128340
[org.apache.ojb.odmg.TransactionImpl] DEBUG: proceeding with lock on class:
org.apache.cocoon.ojb.samples.bean.Contact object
org.apache.cocoon.ojb.samples.bean.Contact@e634bf
[org.apache.ojb.odmg.locking.LockManagerDefaultImpl] DEBUG:
LM.readLock(tx-127.0.0.1:988707:fdc9bbf600:-7fff,
org.apache.cocoon.ojb.samples.bean.Contact{1})
[org.apache.ojb.odmg.ObjectEnvelopeTable] DEBUG: register:
org.apache.cocoon.ojb.samples.bean.Contact{1}(org.apache.ojb.odmg.states.StateOldClean)
[org.apache.ojb.odmg.ObjectEnvelopeTable] DEBUG: register:
org.apache.cocoon.ojb.samples.bean.Login{f@foo.com}(org.apache.ojb.odmg.states.StateOldClean)
[org.apache.ojb.odmg.TransactionImpl] DEBUG: call beginTransaction() on PB
instance
[org.apache.ojb.odmg.ObjectEnvelopeTable] DEBUG: PB is in internal tx: true
broker was: org.apache.ojb.broker.core.PersistenceBrokerHandle@1dc6a9d
[org.apache.ojb.odmg.TransactionImpl] DEBUG: Commit transaction
org.apache.ojb.odmg.TransactionImpl@128340, commit on broker
org.apache.ojb.broker.core.PersistenceBrokerHandle@1dc6a9d
[org.apache.ojb.odmg.locking.LockManagerDefaultImpl] DEBUG:
LM.releaseLock(tx-127.0.0.1:988707:fdc9bbf600:-7fff,
org.apache.cocoon.ojb.samples.bean.Login{f@foo.com})
[org.apache.ojb.odmg.locking.LockManagerDefaultImpl] DEBUG:
LM.releaseLock(tx-127.0.0.1:988707:fdc9bbf600:-7fff,
org.apache.cocoon.ojb.samples.bean.Contact{1})
[org.apache.ojb.odmg.TransactionImpl] DEBUG: Close Transaction and release
current PB org.apache.ojb.broker.core.PersistenceBrokerHandle@1dc6a9d on tx
org.apache.ojb.odmg.TransactionImpl@128340
Any help would be greatly appreciated.
Thanks
Steve
_________________________________________________________________
Dont just search. Find. Check out the new MSN Search!
http://search.msn.click-url.com/go/onm00200636ave/direct/01/
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org