We found out some more details about this one. OpenJPA causes a PersistenceException: ORA-00936: missing expression when a named query is executed for "ExportOrder". The sql statement contains empty IN() expressions in the where clause. "ExportOrder" has a one-to-many relation to "ExportOrderVm" (fetch type "EAGER"). The entity "ExportOrderVm" has a composite primary key that is represented by the id class "ExportOrderVmId".
In 4 different scenarios everything works perfectly: - if the fetch type is changed to "LAZY" - if execution is performed as native query - if "ExportOrderVm" wouldn’t have a composite primary key - if using H2 database instead of Oracle Why does the named query fail in the constellation described above (FetchType.EAGER, Oracle, Composite Primary Key, NamedQuery)? We think this is a bug in how OpenJPA generates SELECT statements. Could you please have a look? Thank you! This doesn’t work: Query query = em.createNamedQuery("selectAllExportOrder"); List<ExportOrder> exportOrderList = query.getResultList(); This works fine: Query query = em.createNativeQuery("SELECT * FROM EXPORT_ORDER", ExportOrder.class); List<ExportOrder> exportOrderList = query.getResultList(); public class ExportOrderVmId implements Serializable { private Long exportOrderId; private Long vmId; : } @Entity @IdClass(ExportOrderVmId.class) @Table(name = "EXPORT_ORDER_VM", schema = "INFOP_SYSTEM") public class ExportOrderVm implements Serializable { @Id @Column(name = "VM_ID") private Long vmId; @Id @ManyToOne @JoinColumn(name = "EXPORT_ORDER_ID") @ForeignKey private ExportOrder exportOrderId; : } @Entity @NamedQuery(name = "selectAllExportOrder", query = "SELECT ea FROM ExportOrder ea") @Table(name = "EXPORT_ORDER", schema = "INFOP_SYSTEM") public class ExportOrder implements Serializable { @Id @SequenceGenerator(name = "InfopSystem.seqExportOrder", sequenceName = "INFOP_SYSTEM.SEQ_EXPORT_ORDER") @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "InfopSystem.seqExportOrder") @Column(name = ID) private Long id; @Size(max = 100) @Column(name = NAME) private String name; @ElementDependent @OneToMany(mappedBy = "exportOrderId", fetch = FetchType.EAGER, cascade = CascadeType.ALL) private List<ExportOrderVm> exportOrderVmList = new ArrayList<ExportOrderVm>(); : } <openjpa-1.2.3-SNAPSHOT-r422266:1053401 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: ORA-00936: missing expression {prepstmnt 328799129 SELECT t0.ID, t1.EXPORT_ORDER_ID, t1.VM_ID, t2.ID, t2.NAME FROM INFOP_SYSTEM.EXPORT_ORDER t0, INFOP_SYSTEM.EXPORT_ORDER_VM t1, INFOP_SYSTEM.EXPORT_ORDER t2 WHERE (t0.ID IN (?, ?) OR t0.ID IN () OR t0.ID IN () OR t0.ID IN () OR t0.ID IN ()) AND t0.ID = t1.EXPORT_ORDER_ID AND t1.EXPORT_ORDER_ID = t2.ID(+) ORDER BY t0.ID ASC [params=(long) 780, (long) 778]} [code=936, state=42000] at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4247) at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4212) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:102) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:88) at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:64) at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.handleCheckedException(SelectResultObjectProvider.java:155) at org.apache.openjpa.lib.rop.WindowResultList.getInternal(WindowResultList.java:150) at org.apache.openjpa.lib.rop.AbstractNonSequentialResultList.get(AbstractNonSequentialResultList.java:73) at org.apache.openjpa.kernel.DelegatingResultList.get(DelegatingResultList.java:244) : Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ORA-00936: missing expression {prepstmnt 328799129 SELECT t0.ID, t1.EXPORT_ORDER_ID, t1.VM_ID, t2.ID, t2.NAME FROM INFOP_SYSTEM.EXPORT_ORDER t0, INFOP_SYSTEM.EXPORT_ORDER_VM t1, INFOP_SYSTEM.EXPORT_ORDER t2 WHERE (t0.ID IN (?, ?) OR t0.ID IN () OR t0.ID IN () OR t0.ID IN () OR t0.ID IN ()) AND t0.ID = t1.EXPORT_ORDER_ID AND t1.EXPORT_ORDER_ID = t2.ID(+) ORDER BY t0.ID ASC [params=(long) 780, (long) 778]} [code=936, state=42000] at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:215) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:203) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:57) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:895) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1599) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:252) at org.apache.openjpa.jdbc.sql.SelectImpl.executeQuery(SelectImpl.java:509) at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:384) at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:325) at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:331) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.executeEagerSelects(PagingResultObjectProvider.java:380) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.executeEagerSelects(PagingResultObjectProvider.java:299) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.fillPage(PagingResultObjectProvider.java:270) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.getResultObject(PagingResultObjectProvider.java:219) at org.apache.openjpa.lib.rop.WindowResultList.getInternal(WindowResultList.java:131) ... 29 more NestedThrowables: java.sql.SQLSyntaxErrorException: ORA-00936: missing expression at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440) at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396) at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837) at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445) at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191) at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523) at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207) at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:863) at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1153) at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1275) at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3576) at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3620) at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1491) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:264) at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:893) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:262) at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1599) at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:252) at org.apache.openjpa.jdbc.sql.SelectImpl.executeQuery(SelectImpl.java:509) at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:384) at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:325) at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:331) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.executeEagerSelects(PagingResultObjectProvider.java:380) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.executeEagerSelects(PagingResultObjectProvider.java:299) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.fillPage(PagingResultObjectProvider.java:270) at org.apache.openjpa.jdbc.kernel.PagingResultObjectProvider.getResultObject(PagingResultObjectProvider.java:219) at org.apache.openjpa.lib.rop.WindowResultList.getInternal(WindowResultList.java:131) at org.apache.openjpa.lib.rop.AbstractNonSequentialResultList.get(AbstractNonSequentialResultList.java:73) at org.apache.openjpa.kernel.DelegatingResultList.get(DelegatingResultList.java:244) : -- View this message in context: http://openjpa.208410.n2.nabble.com/Wrong-SQL-statement-being-generated-tp7470306p7484773.html Sent from the OpenJPA Users mailing list archive at Nabble.com.