Skip to Main Content

Integration

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

ClassCastException when using enum

573632May 10 2007 — edited Jun 1 2007
Hi,

I am using enum with @Enumerated annotation. I am using the enumType.STRING on my object and defined the DB column as string. Ideally this should work without any mapping issues as I have defined String on both sides. But for some reason, I am getting the following ClassCastException when I try to fetch records with a WHERE clause using enum field. I am using TopLink Essentials 2.44

ava.lang.ClassCastException
at java.lang.Class.cast(Unknown Source)
at oracle.toplink.essentials.mappings.converters.EnumTypeConverter.convertObjectValueToDataValue(EnumTypeConverter.java:129)
at oracle.toplink.essentials.mappings.foundation.AbstractDirectMapping.getFieldValue(AbstractDirectMapping.java:447)
at oracle.toplink.essentials.internal.expressions.QueryKeyExpression.getFieldValue(QueryKeyExpression.java:268)
at oracle.toplink.essentials.internal.expressions.ConstantExpression.printSQL(ConstantExpression.java:98)
at oracle.toplink.essentials.expressions.ExpressionOperator.printDuo(ExpressionOperator.java:1794)
at oracle.toplink.essentials.internal.expressions.CompoundExpression.printSQL(CompoundExpression.java:228)
at oracle.toplink.essentials.internal.expressions.RelationExpression.printSQL(RelationExpression.java:546)
at oracle.toplink.essentials.expressions.ExpressionOperator.printDuo(ExpressionOperator.java:1794)
at oracle.toplink.essentials.internal.expressions.CompoundExpression.printSQL(CompoundExpression.java:228)
at oracle.toplink.essentials.expressions.ExpressionOperator.printDuo(ExpressionOperator.java:1789)
at oracle.toplink.essentials.internal.expressions.CompoundExpression.printSQL(CompoundExpression.java:228)
at oracle.toplink.essentials.internal.expressions.ExpressionSQLPrinter.translateExpression(ExpressionSQLPrinter.java:271)
at oracle.toplink.essentials.internal.expressions.ExpressionSQLPrinter.printExpression(ExpressionSQLPrinter.java:127)
at oracle.toplink.essentials.internal.expressions.SQLSelectStatement.printSQL(SQLSelectStatement.java:1340)
at oracle.toplink.essentials.internal.expressions.SQLSelectStatement.buildCall(SQLSelectStatement.java:705)
at oracle.toplink.essentials.descriptors.ClassDescriptor.buildCallFromStatement(ClassDescriptor.java:548)
at oracle.toplink.essentials.internal.queryframework.StatementQueryMechanism.setCallFromStatement(StatementQueryMechanism.java:393)
at oracle.toplink.essentials.internal.queryframework.ExpressionQueryMechanism.prepareReportQuerySelectAllRows(ExpressionQueryMechanism.java:1465)
at oracle.toplink.essentials.queryframework.ReportQuery.prepareSelectAllRows(ReportQuery.java:1041)
at oracle.toplink.essentials.queryframework.ReadAllQuery.prepare(ReadAllQuery.java:398)
at oracle.toplink.essentials.queryframework.ReportQuery.prepare(ReportQuery.java:904)
at oracle.toplink.essentials.queryframework.DatabaseQuery.checkPrepare(DatabaseQuery.java:391)
at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.checkPrepare(ObjectLevelReadQuery.java:469)
at oracle.toplink.essentials.queryframework.DatabaseQuery.execute(DatabaseQuery.java:591)
at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:677)
at oracle.toplink.essentials.queryframework.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:731)
at oracle.toplink.essentials.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2219)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:937)
at oracle.toplink.essentials.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:909)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:346)
at oracle.toplink.essentials.internal.ejb.cmp3.base.EJBQueryImpl.getResultList(EJBQueryImpl.java:453)

And here is the SQL I am trying to run in my EntityManager.

SELECT w FROM work w JOIN w.currentTask t where w.currentTask.id = t.id and t.taskStatus <> 'STATUS_DONE'

taskStatus has been defined as enum (type=String) on my object.

I am not sure if this is a bug with 2.44 or are there any limitations using enum in TopLink Essentials JPA? It works when I insert the record, but getting this error only when I use the enum in the WHERE clause. Any ideas? Thanks in advance!
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Jun 29 2007
Added on May 10 2007
7 comments
2,237 views