openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marc Prud'hommeaux <mprud...@apache.org>
Subject Re: Does OpenJPA support updating of related objects via JPQL?
Date Mon, 18 Sep 2006 16:45:12 GMT
Kevin-

The only thing that can be updated in a bulk update statement is a  
field in the Entity that is the subject of the UPDATE statement  
without any traversals, as per:

4.10 Bulk Update and Delete Operations

Bulk update and delete operations apply to entities of a single  
entity class (together with its subclasses, if any). Only one entity  
abstract schema type may be specified in the FROM or UPDATE clause.  
The syntax of these operations is as follows:

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




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
> .<init>(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


Mime
View raw message