ClassCastException when using enum
573632May 10 2007 — edited Jun 1 2007Hi,
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!