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 Laurie Harper <zo...@holoweb.net> on 2004/03/13 05:06:16 UTC
Querying on foreign key fields
Hi, I'm using OJB 1.0 RC5 with the ODMG API. Everythings working fine
for OQL queries binding basic Java types (like String) but I'm getting
an odd error when trying to query foreign key attributes.
If I do this:
ClassA a = getAnA();
OQLQuery query = odmg.newOQLQuery();
query.create(
"select all from "+
ClassB.class.getName+
" where ClassA = $0"
);
query.bind(a);
query.execute();
I get an error that ClassA isn't serializable. If I make it
serializable, I get a SQL exception because OJB is passing the
serialized form of a as the bound value.
I'm generating my repository mappings with the xDoclet module and I'm
pretty sure they're right (see below). The same code is working fine in
another project (though using a much older version of OJB).
Here's what's in the repository_user.xml for the two classes:
<class-descriptor
class="ClassA"
table="ClassA"
>
<field-descriptor
name="ID"
column="ID"
jdbc-type="INTEGER"
primarykey="true"
nullable="false"
indexed="true"
access="anonymous"
/>
...
</class-descriptor>
<class-descriptor
class="ClassB"
table="ClassB"
>
<field-descriptor
name="ID"
column="ID"
jdbc-type="INTEGER"
primarykey="true"
nullable="false"
indexed="true"
access="anonymous"
/>
<field-descriptor
name="CLASSA_ID"
column="CLASSA_ID"
jdbc-type="INTEGER"
nullable="false"
access="anonymous"
/>
...
<reference-descriptor
name="ClassA"
class-ref="ClassA"
>
<foreignkey field-ref="CLASSA_ID"/>
</reference-descriptor>
</class-descriptor>
The error I get is (once I've made ClassA serializable):
java.sql.SQLException: Wrong data type: For input string:
"aced0005737200276e65742e68...
I've tried making the primary key column an int property on the class
instead of using anonymous access, to no avail. Any idea what I'm doing
wrong? (I admit I haven't used OJB in quite a while, so it could
something stupid!)
Thanks,
L.
PS, I can post the real repository.xml and all source code if the above
is insufficient.
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Querying on foreign key fields
Posted by Laurie Harper <zo...@holoweb.net>.
Hm, I was afraid that might be what was needed. The odd thing is, I'm
sure what I tried used to work at one time (back when I was using OJB
0.9.7). Has something changed since then?
I've tried to keep database 'artifacts' like foreign key fields out of
my object model; they're all mapped as anonymous properties right now.
Is there any way to get at anonymous property values without making them
explicit in the class?
L.
Luis Cruz wrote:
> Hello,
>
> Try something like this instead:
>
> ClassA a = getAnA();
> OQLQuery query = odmg.newOQLQuery();
> query.create("select all from "+
> ClassB.class.getName() +
> " where ClassA.ID = $1"
> );
> query.bind(a.getID());
> query.execute();
>
> Documentation on using the ODMG API can be found at:
> http://db.apache.org/ojb/odmg-tutorial.html
>
> Cheers,
> Luis Cruz
>
>
> On Sat, 2004-03-13 at 04:06, Laurie Harper wrote:
>
>>Hi, I'm using OJB 1.0 RC5 with the ODMG API. Everythings working fine
>>for OQL queries binding basic Java types (like String) but I'm getting
>>an odd error when trying to query foreign key attributes.
>>
>>If I do this:
>>
>> ClassA a = getAnA();
>> OQLQuery query = odmg.newOQLQuery();
>> query.create(
>> "select all from "+
>> ClassB.class.getName+
>> " where ClassA = $0"
>> );
>>query.bind(a);
>>query.execute();
>>
>>I get an error that ClassA isn't serializable. If I make it
>>serializable, I get a SQL exception because OJB is passing the
>>serialized form of a as the bound value.
>>
>>I'm generating my repository mappings with the xDoclet module and I'm
>>pretty sure they're right (see below). The same code is working fine in
>>another project (though using a much older version of OJB).
>>
>>Here's what's in the repository_user.xml for the two classes:
>>
>><class-descriptor
>> class="ClassA"
>> table="ClassA"
>> >
>> <field-descriptor
>> name="ID"
>> column="ID"
>> jdbc-type="INTEGER"
>> primarykey="true"
>> nullable="false"
>> indexed="true"
>> access="anonymous"
>> />
>> ...
>></class-descriptor>
>>
>><class-descriptor
>> class="ClassB"
>> table="ClassB"
>> >
>> <field-descriptor
>> name="ID"
>> column="ID"
>> jdbc-type="INTEGER"
>> primarykey="true"
>> nullable="false"
>> indexed="true"
>> access="anonymous"
>> />
>> <field-descriptor
>> name="CLASSA_ID"
>> column="CLASSA_ID"
>> jdbc-type="INTEGER"
>> nullable="false"
>> access="anonymous"
>> />
>> ...
>> <reference-descriptor
>> name="ClassA"
>> class-ref="ClassA"
>> >
>> <foreignkey field-ref="CLASSA_ID"/>
>> </reference-descriptor>
>></class-descriptor>
>>
>>The error I get is (once I've made ClassA serializable):
>>
>>java.sql.SQLException: Wrong data type: For input string:
>>"aced0005737200276e65742e68...
>>
>>I've tried making the primary key column an int property on the class
>>instead of using anonymous access, to no avail. Any idea what I'm doing
>>wrong? (I admit I haven't used OJB in quite a while, so it could
>>something stupid!)
>>
>>Thanks,
>>
>>L.
>>
>>PS, I can post the real repository.xml and all source code if the above
>>is insufficient.
>>
>>
>>
>>---------------------------------------------------------------------
>>To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
>>For additional commands, e-mail: ojb-user-help@db.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org
Re: Querying on foreign key fields
Posted by Luis Cruz <le...@netcabo.pt>.
Hello,
Try something like this instead:
ClassA a = getAnA();
OQLQuery query = odmg.newOQLQuery();
query.create("select all from "+
ClassB.class.getName() +
" where ClassA.ID = $1"
);
query.bind(a.getID());
query.execute();
Documentation on using the ODMG API can be found at:
http://db.apache.org/ojb/odmg-tutorial.html
Cheers,
Luis Cruz
On Sat, 2004-03-13 at 04:06, Laurie Harper wrote:
> Hi, I'm using OJB 1.0 RC5 with the ODMG API. Everythings working fine
> for OQL queries binding basic Java types (like String) but I'm getting
> an odd error when trying to query foreign key attributes.
>
> If I do this:
>
> ClassA a = getAnA();
> OQLQuery query = odmg.newOQLQuery();
> query.create(
> "select all from "+
> ClassB.class.getName+
> " where ClassA = $0"
> );
> query.bind(a);
> query.execute();
>
> I get an error that ClassA isn't serializable. If I make it
> serializable, I get a SQL exception because OJB is passing the
> serialized form of a as the bound value.
>
> I'm generating my repository mappings with the xDoclet module and I'm
> pretty sure they're right (see below). The same code is working fine in
> another project (though using a much older version of OJB).
>
> Here's what's in the repository_user.xml for the two classes:
>
> <class-descriptor
> class="ClassA"
> table="ClassA"
> >
> <field-descriptor
> name="ID"
> column="ID"
> jdbc-type="INTEGER"
> primarykey="true"
> nullable="false"
> indexed="true"
> access="anonymous"
> />
> ...
> </class-descriptor>
>
> <class-descriptor
> class="ClassB"
> table="ClassB"
> >
> <field-descriptor
> name="ID"
> column="ID"
> jdbc-type="INTEGER"
> primarykey="true"
> nullable="false"
> indexed="true"
> access="anonymous"
> />
> <field-descriptor
> name="CLASSA_ID"
> column="CLASSA_ID"
> jdbc-type="INTEGER"
> nullable="false"
> access="anonymous"
> />
> ...
> <reference-descriptor
> name="ClassA"
> class-ref="ClassA"
> >
> <foreignkey field-ref="CLASSA_ID"/>
> </reference-descriptor>
> </class-descriptor>
>
> The error I get is (once I've made ClassA serializable):
>
> java.sql.SQLException: Wrong data type: For input string:
> "aced0005737200276e65742e68...
>
> I've tried making the primary key column an int property on the class
> instead of using anonymous access, to no avail. Any idea what I'm doing
> wrong? (I admit I haven't used OJB in quite a while, so it could
> something stupid!)
>
> Thanks,
>
> L.
>
> PS, I can post the real repository.xml and all source code if the above
> is insufficient.
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
> For additional commands, e-mail: ojb-user-help@db.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-user-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-user-help@db.apache.org