Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[eclipselink-users] EclipseLink generates wrong SQL from batch JPQL

Hello,

When running the following JPQL statement, we get the exception shown below. as you'll see EL
creates a temporary table "like contingent_alteration", but inserts lines that only contain the
primary key column. Because there's a not-null column without default in the table
contingent_alteration, this must fail.

Is this a known bug?

JPQL:
"delete from ContingentAlteration a where a.contingent = :stock"

Kind Regards, Michael

Excerpt from the program-log:
[EL Fine]: 2010-02-24
14:36:48.243--ClientSession(9907578)--Connection(33039820)--Thread(Thread[ModalContext,5,main])--CREATE
TEMPORARY TABLE IF NOT EXISTS TL_contingent_alteration LIKE contingent_alteration
[EL Fine]: 2010-02-24
14:36:48.243--ClientSession(9907578)--Connection(33039820)--Thread(Thread[ModalContext,5,main])--INSERT
INTO TL_contingent_alteration (contingent_alteration_id) SELECT contingent_alteration_id FROM
contingent_alteration WHERE (abstract_contingent_id = ?)
   bind => [203]
[EL Fine]: 2010-02-24
14:36:48.258--ClientSession(9907578)--Thread(Thread[ModalContext,5,main])--SELECT 1
[EL Fine]: 2010-02-24
14:36:48.258--ClientSession(9907578)--Connection(33039820)--Thread(Thread[ModalContext,5,main])--DELETE
FROM TL_contingent_alteration
[EL Warning]: 2010-02-24
14:36:48.258--UnitOfWork(33072549)--Thread(Thread[ModalContext,5,main])--Exception
[EclipseLink-4002] (Eclipse Persistence Services - 1.2.0.v20091016-r5565):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Field 'abstract_contingent_id' doesn't have a default
value
Error Code: 1364
Call: INSERT INTO TL_contingent_alteration (contingent_alteration_id) SELECT
contingent_alteration_id FROM contingent_alteration WHERE (abstract_contingent_id = ?)
   bind => [203]
Query: DeleteAllQuery(referenceClass=ContingentAlteration sql="DELETE FROM
TL_contingent_alteration")
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 1.2.0.v20091016-r5565):
org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: java.sql.SQLException: Field 'abstract_contingent_id' doesn't have a default
value
Error Code: 1364
Call: INSERT INTO TL_contingent_alteration (contingent_alteration_id) SELECT
contingent_alteration_id FROM contingent_alteration WHERE (abstract_contingent_id = ?)
   bind => [203]
Query: DeleteAllQuery(referenceClass=ContingentAlteration sql="DELETE FROM
TL_contingent_alteration")
   at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)
   at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:799)
   at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:865)
   at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:585)
   at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:528)
   at
org.eclipse.persistence.internal.sessions.AbstractSession.executeCall(AbstractSession.java:914)
   at
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:205)
   at
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.deleteAllUsingTempTables(DatasourceCallQueryMechanism.java:129)
   at
org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.deleteAll(DatasourceCallQueryMechanism.java:86)
   at org.eclipse.persistence.queries.DeleteAllQuery.executeDatabaseQuery(DeleteAllQuery.java:174)
   at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:670)
   at org.eclipse.persistence.queries.DatabaseQuery.executeInUnitOfWork(DatabaseQuery.java:589)
   at org.eclipse.persistence.queries.ModifyAllQuery.executeInUnitOfWork(ModifyAllQuery.java:145)
   at org.eclipse.persistence.queries.DeleteAllQuery.executeInUnitOfWork(DeleteAllQuery.java:100)
   at
org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2858)
   at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1225)
   at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1207)
   at
org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1181)
   at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeUpdate(EJBQueryImpl.java:475)
   at de.optitool.biz.tp.StockManager.removeAlterationsAndDetections(StockManager.java:535)
   at de.optitool.biz.tp.StockManager.dropContingents(StockManager.java:517)
   at de.optitool.biz.tp.StockManager.dropOldContingents(StockManager.java:596)
   at net.uniopt.ot.action.CleanUpDataWizard$1.run(CleanUpDataWizard.java:191)
   at org.eclipse.jface.operation.ModalContext$ModalContextThread.run(ModalContext.java:121)
Caused by: java.sql.SQLException: Field 'abstract_contingent_id' doesn't have a default value
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
   at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3491)
   at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3423)
   at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1936)
   at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2060)
   at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2542)
   at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1734)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2019)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1937)
   at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1922)
   at
org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:790)
   ... 22 more


Back to the top