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