cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ted Moens <tmo...@telus.net>
Subject Re: Queries
Date Mon, 03 Mar 2008 22:15:10 GMT
Hi Mike:

Thanks and I understand the need for details.  The relationship is a 
simple one.  A "Game" belongs to a "Grouping" and there are many games 
in a grouping.  My model is full of similar relationships.

When I use the XML encoder to dump all the games in a grouping to the 
client, there is no problem.  Or, when I use the XML encoder to show 
attributes of the grouping associated with a particular game, it also 
works fine.

Here are two expressions I use in the code the first is based on a test 
against a simple attribute:
		expressionList.add(ExpressionFactory.matchExp("gameState", new 
ExpressionParameter("gameState")));

No problem, queries work. Here is the one for comparing to a Game's 
Grouping's name:
	 
expressionList.add(ExpressionFactory.matchExp("toGrouping.groupingName", 
new ExpressionParameter("groupingId")));

This is where I get the runtime error:

Can't resolve path component: [Grouping.groupingName]

Here is the data model for my "Game" class minus a lot of noise 
attributes...
---------------- db part ---------------------
	<db-entity name="game" catalog="ultiscore">
sMandatory="true" length="10"/>
		<db-attribute name="gameState" type="CHAR" isMandatory="true" 
length="11"/>
		<db-attribute name="groupingId" type="INTEGER" isMandatory="true" 
length="10"/>
	</db-entity>
-------------------- db relationship part ------------------
	<db-relationship name="toGrouping" source="game" target="grouping" 
toMany="false">
		<db-attribute-pair source="groupingId" target="groupingId"/>
	</db-relationship>
------------------ object part --------------------
	<obj-entity name="Game" className="org.tsw.ultiserver.Game" 
dbEntityName="game">
		<obj-attribute name="gameState" type="java.lang.String" 
db-attribute-path="gameState"/>
	</obj-entity>
------------------ object relationship part --------------------
	<obj-relationship name="toGrouping" source="Game" target="Grouping" 
db-relationship-path="toGrouping"/>


And here is the Grouping Class again minus the junk:
--------------------------------------
	<db-entity name="grouping" catalog="ultiscore">
		<db-attribute name="groupingName" type="VARCHAR" isMandatory="true" 
length="50"/>
	</db-entity>
--------------------------------------
	<db-relationship name="gameArray" source="grouping" target="game" 
toMany="true">
		<db-attribute-pair source="groupingId" target="groupingId"/>
	</db-relationship>
--------------------------------------
	<obj-entity name="Grouping" className="org.tsw.ultiserver.Grouping" 
dbEntityName="grouping">
		<obj-attribute name="groupingName" type="java.lang.String" 
db-attribute-path="groupingName"/>
	</obj-entity>
--------------------------------------
	<obj-relationship name="gameArray" source="Grouping" target="Game" 
db-relationship-path="gameArray"/>

============================

Ted


Mike Kienenberger wrote:
> The first thing I would check is to verify that you have an
> ObjRelationship named "Artist" from your root entity.  Note that the
> name is "toArtist" in the analogous code.
> 
> It's somewhat difficult to comment on the cause of a concrete error
> given only theoretical environment information :-)
> 
> The relevant sections of your DataMap + the actual code would be helpful.
> 
> On 3/3/08, Ted Moens <tmoens@telus.net> wrote:
>> Greetings:
>>
>>  I am trying to do a parameterized select query.  My situation is
>>  directly analogous to the example:
>>
>>  list.add(ExpressionFactory.matchExp("paintingTitle",
>>           new ExpressionParameter("pname")));
>>  list.add(ExpressionFactory.matchExp("toArtist.artistName",
>>           new ExpressionParameter("aname")));
>>
>>  I follow this pattern but I run into troubles with when the first
>>  argument to the matchExp is an attribute of an object other than the
>>  target class itself.  So in the above example, the first expression
>>  works fine but the second would fail with the following:
>>
>>  Can't resolve path component: [Artist.artistName])
>>
>>  I've very carefully checked that in other situations the attribute
>>  analogous to Artist.artistName is in fact accessible.
>>
>>  Is there a common error made in these situations?
>>
>>  Thanks in advance for any help.
>>
>>  Ted
>>
>>  FYI...
>>
>>
>>         at org.apache.cayenne.map.Entity$PathIterator.next(Entity.java:375)
>>         at
>>  org.apache.cayenne.access.trans.QueryAssemblerHelper.appendObjPath(QueryAssemblerHelper.java:90)
>>         at
>>  org.apache.cayenne.access.trans.QualifierTranslator.objectNode(QualifierTranslator.java:338)
>>         at org.apache.cayenne.exp.Expression.traverse(Expression.java:455)
>>         at org.apache.cayenne.exp.Expression.traverse(Expression.java:452)
>>         at org.apache.cayenne.exp.Expression.traverse(Expression.java:432)
>>         at
>>  org.apache.cayenne.access.trans.QualifierTranslator.doTranslation(QualifierTranslator.java:74)
>>         at
>>  org.apache.cayenne.access.trans.SelectTranslator.createSqlString(SelectTranslator.java:123)
>>         at
>>  org.apache.cayenne.dba.mysql.MySQLSelectTranslator.createSqlString(MySQLSelectTranslator.java:31)
>>         at
>>  org.apache.cayenne.access.trans.QueryAssembler.createStatement(QueryAssembler.java:95)
>>         at
>>  org.apache.cayenne.access.jdbc.SelectAction.performAction(SelectAction.java:71)
>>         at
>>  org.apache.cayenne.access.DataNodeQueryAction.runQuery(DataNodeQueryAction.java:57)
>>         at org.apache.cayenne.access.DataNode.performQueries(DataNode.java:236)
>>         at
>>  org.apache.cayenne.access.DataDomainQueryAction.runQuery(DataDomainQueryAction.java:446)
>>         at
>>  org.apache.cayenne.access.DataDomainQueryAction.access$000(DataDomainQueryAction.java:67)
>>         at
>>  org.apache.cayenne.access.DataDomainQueryAction$2.transform(DataDomainQueryAction.java:418)
>>         at
>>  org.apache.cayenne.access.DataDomain.runInTransaction(DataDomain.java:853)
>>         at
>>  org.apache.cayenne.access.DataDomainQueryAction.runQueryInTransaction(DataDomainQueryAction.java:415)
>>         at
>>  org.apache.cayenne.access.DataDomainQueryAction.execute(DataDomainQueryAction.java:119)
>>         at org.apache.cayenne.access.DataDomain.onQuery(DataDomain.java:746)
>>         at
>>  org.apache.cayenne.util.ObjectContextQueryAction.runQuery(ObjectContextQueryAction.java:282)
>>         at
>>  org.apache.cayenne.access.DataContextQueryAction.execute(DataContextQueryAction.java:59)
>>         at org.apache.cayenne.access.DataContext.onQuery(DataContext.java:1323)
>>         at
>>  org.apache.cayenne.access.DataContext.performQuery(DataContext.java:1312)
>>         at org.tsw.ultiserver.getXMLData.processRequest(getXMLData.java:138)
>>         at org.tsw.ultiserver.getXMLData.doGet(getXMLData.java:159)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
>>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
>>         at
>>  org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
>>         at
>>  org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
>>         at
>>  org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>>         at
>>  org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
>>         at
>>  org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
>>         at
>>  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
>>         at
>>  org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
>>         at
>>  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
>>         at
>>  org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
>>         at
>>  org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
>>         at
>>  org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
>>         at
>>  org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
>>         at
>>  org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
>>         at java.lang.Thread.run(Unknown Source)
>>
>>
> 
> 


Mime
View raw message