Ebean converts long to integer

62 views
Skip to first unread message

Saulius

unread,
Jan 19, 2012, 10:14:39 PM1/19/12
to Ebean ORM
Hi,

Given cityIds is List<Long>, i'm trying to run this code:

Queury<Hotel> q = Ebean.find(Hotel.class);
q.where().in("city.id", cityIds);
q.findList();

And get exception:

javax.persistence.PersistenceException: Query threw SQLException:An I/
O error occured while sending to the backend.
Bind values:[<... skipped, basically just lots of integer ids of type
long ...>]
Query was:
select t0.*
from hotel t0
where t0.city in (<... skipped, basically just lots of question
marks ...> )


at
com.avaje.ebeaninternal.server.query.CQuery.createPersistenceException(CQuery.java:
839)
at
com.avaje.ebeaninternal.server.query.CQuery.createPersistenceException(CQuery.java:
819)
at
com.avaje.ebeaninternal.server.query.CQueryEngine.findMany(CQueryEngine.java:
233)
at
com.avaje.ebeaninternal.server.query.DefaultOrmQueryEngine.findMany(DefaultOrmQueryEngine.java:
96)
at
com.avaje.ebeaninternal.server.core.OrmQueryRequest.findList(OrmQueryRequest.java:
315)
at
com.avaje.ebeaninternal.server.core.DefaultServer.findList(DefaultServer.java:
1534)
at
com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery.findList(DefaultOrmQuery.java:
945)

Caused by: org.postgresql.util.PSQLException: An I/O error occured
while sending to the backend.
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:
220)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:
451)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:
350)
at
org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:
254)
at
com.jolbox.bonecp.PreparedStatementHandle.executeQuery(PreparedStatementHandle.java:
197)
at
com.avaje.ebeaninternal.server.query.CQuery.prepareBindExecuteQuery(CQuery.java:
406)
at
com.avaje.ebeaninternal.server.query.CQueryEngine.findMany(CQueryEngine.java:
197)
... 47 more
Caused by: java.io.IOException: Tried to send an out-of-range integer
as a 2-byte value: 141812
at org.postgresql.core.PGStream.SendInteger2(PGStream.java:201)
at
org.postgresql.core.v3.QueryExecutorImpl.sendParse(QueryExecutorImpl.java:
786)
at
org.postgresql.core.v3.QueryExecutorImpl.sendOneQuery(QueryExecutorImpl.java:
1053)
at
org.postgresql.core.v3.QueryExecutorImpl.sendQuery(QueryExecutorImpl.java:
647)
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:
192)
... 53 more

org.springframework.transaction.TransactionSystemException: Could not
roll back JDBC transaction; nested exception is
org.postgresql.util.PSQLException: An I/O error occured while sending
to the backend.
at
org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:
285)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:
845)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:
822)
at
org.springframework.test.context.transaction.TransactionalTestExecutionListener
$TransactionContext.endTransaction(TransactionalTestExecutionListener.java:
513)
at
org.springframework.test.context.transaction.TransactionalTestExecutionListener.endTransaction(TransactionalTestExecutionListener.java:
291)
at
org.springframework.test.context.transaction.TransactionalTestExecutionListener.afterTestMethod(TransactionalTestExecutionListener.java:
184)
at
org.springframework.test.context.TestContextManager.afterTestMethod(TestContextManager.java:
406)
at
org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:
90)
at
org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:
72)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:
240)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
49)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at
org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:
61)
at
org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:
70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:
180)
at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:
50)
at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
38)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
467)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:
683)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:
390)
at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:
197)
Caused by: org.postgresql.util.PSQLException: An I/O error occured
while sending to the backend.
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:
220)
at
org.postgresql.jdbc2.AbstractJdbc2Connection.executeTransactionCommand(AbstractJdbc2Connection.java:
650)
at
org.postgresql.jdbc2.AbstractJdbc2Connection.rollback(AbstractJdbc2Connection.java:
687)
at com.jolbox.bonecp.ConnectionHandle.rollback(ConnectionHandle.java:
958)
at
org.springframework.jdbc.datasource.DataSourceTransactionManager.doRollback(DataSourceTransactionManager.java:
282)
... 25 more
Caused by: java.io.IOException: Stream closed
at sun.nio.cs.StreamEncoder.ensureOpen(StreamEncoder.java:26)
at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:121)
at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
at org.postgresql.core.PGStream.flush(PGStream.java:507)
at
org.postgresql.core.v3.QueryExecutorImpl.sendSync(QueryExecutorImpl.java:
692)
at
org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:
193)
... 29 more

It seems that although cityIds is of type List<Long>, Ebean somehow
tries to pass these values as 2 byte integer (short?). Seems like a
bug to me, and since I use long ids everywhere this makes where().in()
quite impossible to use...

Is there some workarount to this?

Regards

Saulius
Reply all
Reply to author
Forward
0 new messages