db-ojb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Kirill Petrov <KVPet...@OwnMail.net>
Subject Re: Collection Query, continuation
Date Wed, 29 Jun 2005 14:35:46 GMT
Hello guys,

is it indeed a bug or am I doing something wrong?? Please, help.

thanks,

Kirill

>> 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


Mime
View raw message