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 <[EMAIL PROTECTED]> 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)