Setting a parameter in a bulk update with a value of type Enum throws an 
exception
----------------------------------------------------------------------------------

                 Key: OPENJPA-289
                 URL: https://issues.apache.org/jira/browse/OPENJPA-289
             Project: OpenJPA
          Issue Type: Bug
    Affects Versions: 0.9.7
         Environment: Windows XP SP2, Java 1.5.0_11, Hypersonic database 
(hsqldb) 1.8.4
            Reporter: Christian Defoy


Assume that Class Shape contains an attribute of type LineType (an Enum).  When 
trying to do a bulk update of the enum value using the following query

UPDATE Shape s SET s.type = :type

and setting the "type" parameter using the following:

query.setParameter( "type", Type.PLAIN );

the following exception is thrown: 

Exception in thread "main" <0.9.7-incubating nonfatal user error> 
org.apache.openjpa.persistence.ArgumentException: The specified parameter of 
type "class test.LineType" is not a valid query parameter.
       at 
org.apache.openjpa.jdbc.sql.DBDictionary.setUnknown(DBDictionary.java:1275)
       at 
org.apache.openjpa.jdbc.sql.SQLBuffer.setParameters(SQLBuffer.java:567)
       at 
org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:478)
       at 
org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:454)
       at 
org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:443)
       at 
org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.executeBulkOperation(JDBCStoreQuery.java:500)
       at 
org.apache.openjpa.jdbc.kernel.JDBCStoreQuery.executeUpdate(JDBCStoreQuery.java:430)
       at 
org.apache.openjpa.kernel.ExpressionStoreQuery$DataStoreExecutor.executeUpdate(ExpressionStoreQuery.java:690)
       at org.apache.openjpa.kernel.QueryImpl.update(QueryImpl.java:1036)
       at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:843)
       at org.apache.openjpa.kernel.QueryImpl.updateAll(QueryImpl.java:879)
       at 
org.apache.openjpa.kernel.DelegatingQuery.updateAll(DelegatingQuery.java:581)
       at 
org.apache.openjpa.persistence.QueryImpl.executeUpdate(QueryImpl.java:313)
       at com.softek.jpa.ShapeHelper.testShapeUpdate(ShapeHelper.java:180)
       at com.softek.jpa.ShapeHelper.run(ShapeHelper.java:78)
       at com.softek.jpa.ShapeHelper.main(ShapeHelper.java:196)

There is a workaround: assuming that the database column is an integer, you can 
use the ordinal value of the enum.  This also assumes that the values of your 
enums are in sync with their ordinal values.


-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to