You need to prefix DB_PATH expressions with "db:". This is how
expression parser distinguishes between the two types of paths. E.g.:
public DbAttribute pathToDbAttribute(Class baseClass, String path) {
if(!path.startsWith("db:")) {
path = "db:" + path;
}
...
}
Andrus
On Apr 7, 2006, at 4:40 PM, Tobias SCHOESSLER wrote:
Andrus, this worked fine, thank you. I use this method to lookup the
ObjAttribute for a given path now.
public ObjAttribute pathToObjAttribute(Class baseClass,
String path)
{
ObjEntity rootEntity =
ctxt.getEntityResolver().lookupObjEntity(baseClass);
ObjAttribute attribute =
(ObjAttribute)Expression.fromString(path).evaluate(rootEntity);
return attribute;
}
In the simplest case I feed this the name of an attribute in the
baseClass
and it returns me the ObjAttribute. e.G. 'countryCode'
However it turned out that I rather need to use Db Paths to also be
able to
specify PK values. I changed the method to
public DbAttribute pathToDbAttribute(Class baseClass, String
path) {
DbEntity rootEntity =
ctxt.getEntityResolver().lookupDbEntity(baseClass);
DbAttribute attribute =
(DbAttribute)Expression.fromString(path).evaluate(rootEntity);
return attribute;
}
I expect to be able to feed it the corresponding database attribute
name
now e.G. COUNTRY_CODE but this fails with the exception
Caused by: org.objectstyle.cayenne.exp.ExpressionException: [v.1.1.3
September 28 2005] Invalid expression type: 'ObjPath', DB_PATH is
expected.
at
org.objectstyle.cayenne.map.DbEntity.resolvePathComponents
(DbEntity.java:249)
at
org.objectstyle.cayenne.exp.parser.ASTPath.evaluateEntityNode
(ASTPath.java:108)
at
org.objectstyle.cayenne.exp.parser.ASTObjPath.evaluateNode
(ASTObjPath.java:85)
at
org.objectstyle.cayenne.exp.parser.SimpleNode.evaluate
(SimpleNode.java:243)
... 43 more
Andrus Adamchik
<[EMAIL PROTECTED]
le.org> To
cayenne-
[EMAIL PROTECTED]
Monday, 3
April cc
2006 16:44
Subject
Re: Path Expression =>
Attribute
Please respond to
[EMAIL PROTECTED]
bator.apache.org
You can evaluate an expression with root ObjEntity:
String path = "toArtist.exhibitArray.closingDate";
ObjEntity rootEntity = context.getEntityResolver().lookupObjEntity
(Painting.class);
ObjAttribute attribute = Expression.fromString(path).evaluate
(rootEntity);
Andrus
On Apr 3, 2006, at 6:36 PM, Tobias SCHOESSLER wrote:
hi,
How do I get from a path expression to the resulting attribute
object.
E.g. Is there anything that I can use to parse a path like
toArtist.exhibitArray.closingDate
and get the corresponding ObjAttribute for closingDate.
As a precondition i would assume that the path evaluates to an
attribute.
thanks
regards
Tobias