| Summary: | java.lang.ClassCastException is thrown when Double field's value is null | ||
|---|---|---|---|
| Product: | z_Archived | Reporter: | Petar Bankovic <petarbankovic> |
| Component: | Eclipselink | Assignee: | Nobody - feel free to take it <nobody> |
| Status: | CLOSED DUPLICATE | QA Contact: | |
| Severity: | major | ||
| Priority: | P3 | CC: | amine.mzid, cfarinis, ivalo, jamesssss, peter.rosell, tom.ware, vikram.jeet.bhatia |
| Version: | unspecified | ||
| Target Milestone: | --- | ||
| Hardware: | All | ||
| OS: | All | ||
| Whiteboard: | |||
Please provide a recreation, or, at a minimum the relevant parts of your mappings. @Entity
@Table(name="Artikal")
public class Artikal implements Serializable, PzEntity {
private static final long serialVersionUID = 1L;
@Id
@Column(unique=true, nullable=false, length=255)
private String sfrProizvod;
@Column(nullable=false, length=255)
private String barKod;
@Column(nullable=false, length=255)
private String bliziOpis;
private double cenaBazna;
private double cenaPlanska;
private double cenaPoeni;
private double duzina;
private double fi;
@Column(nullable=false, length=255)
private String jedMere;
@Column(length=30)
private String katBroj;
@Column(nullable=false, length=255)
private String naziv;
@Column(nullable=false, length=255)
private String opis;
@Column(nullable=false, length=255)
private String dobSifra;
@Column(nullable=false)
private double procKala;
@Column(nullable=false, length=255)
private String prSifra;
private double sirina;
@Column(nullable=false)
private double standPak;
@Column(nullable=false)
private double stokMax;
@Column(nullable=false)
private double stokMin;
@Column(nullable=false)
private double tezina;
@Column(nullable=false, length=255)
private String tip;
private double visina;
setters & getters
...
...
}
JPQL query used:
SELECT a FROM Artikal a
Double fields are making problems. If there is any double field which has null value in the database table, you will get the above exception during the query execution.
I'm using MySql database with the latest jdbc driver provided on their website (if it means anything)
Issue was detected after switching from version 1.1.2 to version 2.0.2
I suspect that the persistence api is trying to assign integer value of 0 instead of double value of 0 to the class field when null value is detected in the database.
can someone confirm this is a bug ? The appears to be a bug in our weaving code. You many be able to workaround by using the persistence unit property: eclipselink.weaving.internal=false I have similar ClassCast exceptions on Double and Float fields when using eclipselink weaving and lazy loading.It seems that eclipselink thinks they are Integer. I am using the latest eclipselink 2.1.x library ---------------------------------------------------------------------------- Here is typical stack trace: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double at gr.auth.itc.euro.rdbms.EuClassStudent._persistence_set(EuClassStudent.java) at org.eclipse.persistence.internal.descriptors.PersistenceObjectAttributeAccessor.setAttributeValueInObject(PersistenceObjectAttributeAccessor.java:46) at org.eclipse.persistence.mappings.DatabaseMapping.setAttributeValueInObject(DatabaseMapping.java:1393) at org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1284) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:341) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:710) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:503) at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectsInto(ObjectBuilder.java:903) at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:423) at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1074) at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:736) at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1034) at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:380) at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:2392) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1291) at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1273) at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:85) at org.eclipse.persistence.internal.indirection.QueryBasedValueHolder.instantiate(QueryBasedValueHolder.java:75) at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:83) at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiateImpl(UnitOfWorkValueHolder.java:160) at org.eclipse.persistence.internal.indirection.UnitOfWorkValueHolder.instantiate(UnitOfWorkValueHolder.java:220) at org.eclipse.persistence.internal.indirection.DatabaseValueHolder.getValue(DatabaseValueHolder.java:83) at org.eclipse.persistence.indirection.IndirectSet.buildDelegate(IndirectSet.java:192) at org.eclipse.persistence.indirection.IndirectSet.getDelegate(IndirectSet.java:343) at org.eclipse.persistence.indirection.IndirectSet.size(IndirectSet.java:500) at gr.auth.itc.euro.cw.server.HandleGetStudentListForClass.execute(HandleGetStudentListForClass.java:39) at gr.auth.itc.euro.cw.server.ClassWebServiceImpl.execute(ClassWebServiceImpl.java:85) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:562) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:188) at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:224) at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1097) at gr.auth.itc.euro.server.EntityManagerFilter.doFilter(EntityManagerFilter.java:42) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) at gr.auth.itc.euro.server.SecurityFilter.doFilter(SecurityFilter.java:82) at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1088) at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:729) at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.handler.RequestLogHandler.handle(RequestLogHandler.java:49) at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at org.mortbay.jetty.Server.handle(Server.java:324) at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505) at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:843) at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:647) at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380) at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395) at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:488) I can confirm that this bug also exists in version 2.1.2. The suggested workaround with disabling weaving works, so the bug seems to be in the weaving method, _persistence_set. In my case I had a property of type long (column in Postgresql is bigint) and got this exception: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Long When I set dummy values in the column I could enable weaving. This happens with null Short type also setting a null-value in the mapping (DescriptorCustomizer) would most likely also resolve the issue. My guess is it is related to setting null into a primitive that cannot take null, using Double instead of double may also work. Primitive should generally only be used on not-null columns as they cannot store null. Setting "eclipselink.weaving.internal"="false" should also resolve the issue. It may be duplicate of Bug325916 Please test if the issue has already been fixed by using version 2.2.0 or beyond. *** This bug has been marked as a duplicate of bug 325916 *** The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink |
Build Identifier: When selecting entity from database, I get java.lang.ClassCastException if there is a Double field whose value in the database is null. Message: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.Double Level: SEVERE Stack Trace: java.lang.Integer cannot be cast to java.lang.Double rs.pezar.db.entity.Artikal._persistence_set(Artikal.java) org.eclipse.persistence.internal.descriptors.PersistenceObjectAttributeAccessor.setAttributeValueInObject(PersistenceObjectAttributeAccessor.java:46) org.eclipse.persistence.mappings.DatabaseMapping.setAttributeValueInObject(DatabaseMapping.java:1368) org.eclipse.persistence.mappings.DatabaseMapping.readFromRowIntoObject(DatabaseMapping.java:1259) org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildAttributesIntoObject(ObjectBuilder.java:332) org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:661) org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally(ObjectBuilder.java:583) org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:552) org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:492) org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:444) org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:635) org.eclipse.persistence.queries.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:838) org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:464) org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:997) org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:675) org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:958) org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:432) org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1021) org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2898) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207) org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181) org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:453) org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:681) rs.pezar.gui.dialogs.sifarnici.PzDialogArtikliExtended.trazi(PzDialogArtikliExtended.java:850) rs.pezar.gui.dialogs.sifarnici.PzDialogArtikliExtended.access$9(PzDialogArtikliExtended.java:779) rs.pezar.gui.dialogs.sifarnici.PzDialogArtikliExtended$6.run(PzDialogArtikliExtended.java:1058) java.lang.Thread.run(Unknown Source) Reproducible: Always