db-ojb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kirill Petrov <KPet...@uci.edu>
Subject Re: Collection Query, continuation
Date Thu, 23 Jun 2005 23:42:46 GMT
Jakob Braeuchi wrote:
> you should try using the path class hint:
> 
> Criteria crit = new Criteria();
> crit.addLike("reactions.name", rName);
> QueryByCriteria query = new QueryByCriteria(Model.class, crit1);
> query.addPathClass("reactions", BidirectionalReaction.class);
> 
> in this case ojb will only use BidirectionalReaction when processing the 
> relationship "reactions".
> 
> there's a test case called PathTest for this feature.
I guess there is a bug in this feature:

here is the code that I have
public static Collection findModelsByAuthorsName(String aName) {

     PersistenceBroker broker = 
PersistenceBrokerFactory.defaultPersistenceBroker();

     try{
       Criteria crit = new Criteria();
       crit.addLike("sources.author", aName);
       QueryByCriteria query = new QueryByCriteria(Model.class, crit, true);
       query.addPathClass("sources", Citation.class);
       return broker.getCollectionByQuery(query);
     } finally {
       broker.close();
     }
   }

when I run it I get an error (below). The problem is that Citation is 
another superclass that has a number of classes that implement it. If 
instead of Citation I use OJBCitation (which is not extended by any 
class) then everything works fine.

Do you have a fix for this or am I doing something wrong?

[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: 
createTableAlias2: path: sources* tableAlias: 
model_sources_knowledge_source A1
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: 
Result of getTableAlias(): null A2
[org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl] DEBUG: 
SQL:SELECT DISTINCT 
A0._id,A0.name,A0.extended_description,A0.license_id,A0.unique_dbid,A0.comment 
FR\
OM model A0 INNER JOIN (model_sources_knowledge_source A1 INNER JOIN 
null A2 ON A1.knowledge_source_id=A2._id) ON A0._id=A1.model_id WHERE 
author LIKE ?
[org.apache.ojb.broker.accesslayer.JdbcAccessImpl] ERROR: SQLException 
during the execution of the query (for edu.uci.ics.sigmoid.OJBModel): 
ERROR: syntax error at or near \
"null"
ERROR: syntax error at or near "null"
java.sql.SQLException: ERROR: syntax error at or near "null"
         at 
org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:1471)
         at 
org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1256)
         at 
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:175)
         at 
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:389)
         at 
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:330)
         at 
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:240)


> 
> jakob
> 
> Kirill Petrov schrieb:
> 
>> Hello everybody,
>>
>> Recently, I asked a question how can a query an object having a 
>> property which is a collection of objects. I received an answer, so, 
>> now my query looks like this:
>>
>> public static Collection findModelsByReactionsName(String rName) {
>>
>>     PersistenceBroker broker = 
>> PersistenceBrokerFactory.defaultPersistenceBroker();
>>
>>     try{
>>       Criteria crit = new Criteria();
>>       crit.addLike("reactions.name", rName);
>>       QueryByCriteria query = new QueryByCriteria(Model.class, crit);
>>       return broker.getCollectionByQuery(query);
>>     } finally {
>>       broker.close();
>>     }
>>   }
>>
>> Now, I have another problem. There are several subclasses of Reaction. 
>> Those subclasses of course have their own properties. For example, 
>> "BidirectionalReaction" has a property "reverseRate". I want to query 
>> the models by this property which implies that I am looking only for 
>> the models that have BidirectionalReactions in them. But I don't know 
>> how to do that. If I just specify "reactions.reverseRate" in the 
>> query, OJB generates SQL that would try to query using all the possibe 
>> subclasses. The SQL of course fails since only one table would have a 
>> column corresponding to reverseRate.
>>
>> How do I write such a query?
>>
>> thanks a lot,
>>
>> Kirill
>>
>> PS
>>
>> Here is explanation of my object model:
>>
>> I have an object model in which there are two objects: Model and
>> Reactiont. This is basically n to m relationship. Model can have a 
>> number of Reactions. Reactions can be in a number of Models.
>> In Java this is implemented by a Collection property in Model class.
>>
>> I want to construct a query that allows me to find all the models that
>> have a particular reaction in them.
>>
>>
>>
>> ---------------------------------------------------------------------
>> 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
> 


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


Mime
View raw message