Hi, The JPQL BNF prohibits this operation. From 4.10: update_statement ::= update_clause [where_clause] update_clause ::=UPDATE abstract_schema_name [[AS] identification_variable] SET update_item {, update_item}* update_item ::= [identification_variable.]{state_field | single_valued_association_field}= new_value The update_item must be an identification variable followed by a single "." with a state field or single-valued association field, so no embedded object. Craig On Sep 18, 2006, at 9:37 AM, Kevin Sutter wrote: > Hi, > Does OpenJPA (or JPA, for tha matter) support the updating of related > objects via JPQL? For example, should the following query work > where we are > attempting to access the orderId on the related currentOrder object? > > UPDATE Customer c SET c.currentOrder.orderId = :orderId WHERE c.id = > :customerId > > As you can guess, we are getting an exception and call stack from > OpenJPA. > But, then we started wondering whether this is even supported by > the JPA > spec. The spec isn't clear one way or the other (or, at least, I > couldn't > find a definitive answer). Any ideas? > > In case you were wondering, here's the call stack: > > [9/16/06 16:15:52:953 EDT] 00000032 ExceptionUtil E CNTR0020E: > EJB threw > an unexpected (non-declared) exception during invocation of method > "openOrder" on bean "BeanId > (OpenJPATestEAR#OpenJPATest.jar#OrderEJB, null)". > Exception data: <4|false|0.9.0-incubating-SNAPSHOT> > org.apache.openjpa.persistence.ArgumentException: An error occurred > while > parsing the query filter 'UPDATE Customer c SET > c.currentOrder.orderId = > :orderId WHERE c.id = :customerId'. Error message: > <4|false|0.9.0-incubating-SNAPSHOT> > org.apache.openjpa.kernel.jpql.ParseException: Encountered "." at > character > 37, but expected: ["="]. > at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder > $ParsedJPQL.parse > (JPQLExpressionBuilder.java:1655) > at org.apache.openjpa.kernel.jpql.JPQLExpressionBuilder$ParsedJPQL > .(JPQLExpressionBuilder.java:1638) > at org.apache.openjpa.kernel.jpql.JPQLParser.parse > (JPQLParser.java:44) > at org.apache.openjpa.kernel.ExpressionStoreQuery.newCompilation( > ExpressionStoreQuery.java:141) > at org.apache.openjpa.kernel.QueryImpl.newCompilation > (QueryImpl.java > :598) > at org.apache.openjpa.kernel.QueryImpl.compileForCompilation( > QueryImpl.java:581) > at org.apache.openjpa.kernel.QueryImpl.compileForExecutor > (QueryImpl.java > :608) > at org.apache.openjpa.kernel.QueryImpl.getOperation > (QueryImpl.java:1421) > at org.apache.openjpa.kernel.DelegatingQuery.getOperation( > DelegatingQuery.java:120) > at org.apache.openjpa.persistence.QueryImpl.executeUpdate > (QueryImpl.java > :293) > : > : > > Thanks, > Kevin Craig Russell Architect, Sun Java Enterprise System http://java.sun.com/products/jdo 408 276-5638 mailto:Craig.Russell@sun.com P.S. A good JDO? O, Gasp!