Hi, I'm not aware of any bugs in this area. It would be great if you could provide a reproducible test case!
Regards, Thomas On Sunday, September 14, 2014, Gili <[email protected]> wrote: > I caught the exception and dumped the database contents after such a > conflict and, sure enough, H2 is trying to insert an existing primary key > value. > > I didn't have these kind of problems before and I'm wondering what has > been triggering all of this. I'm beginning to think this has something to > do with the use of negative numbers with AUTO_INCREMENT or the use of > primary keys that are smaller than BIGINT. > > Gili > > On Saturday, September 13, 2014 4:53:16 PM UTC-4, Gili wrote: >> >> Hi, >> >> I'm running into constraint violations that I believe should be >> impossible using H2 1.4.181. My table definition is: >> >> CREATE TABLE user (id SMALLINT AUTO_INCREMENT(-32768, 1) PRIMARY KEY, >> owner_id SMALLINT, >> email VARCHAR(254) NOT NULL UNIQUE, password VARCHAR(82) NOT NULL, name >> VARCHAR(100) NOT NULL, >> owned_permission_id SMALLINT NOT NULL, view_id SMALLINT NOT NULL, edit_id >> SMALLINT NOT NULL, >> delete_id SMALLINT NOT NULL, version INTEGER NOT NULL, last_modified >> TIMESTAMP NOT NULL, >> FOREIGN KEY (owned_permission_id) REFERENCES permission(id) ON DELETE >> CASCADE, >> FOREIGN KEY (owner_id) REFERENCES user(id), >> FOREIGN KEY (view_id) REFERENCES permission(id), >> FOREIGN KEY (edit_id) REFERENCES permission(id), >> FOREIGN KEY (delete_id) REFERENCES permission(id)); >> >> I am getting this exception: >> >> com.vtlr.backend.ConstraintViolationException: Unique index or primary >> key violation: "PRIMARY KEY ON PUBLIC.USER(ID)"; SQL statement: >> insert into USER (EMAIL, PASSWORD, NAME, OWNED_PERMISSION_ID, OWNER_ID, >> VIEW_ID, EDIT_ID, DELETE_ID, VERSION, LAST_MODIFIED) >> values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [23505-181] >> at com.vtlr.backend.SqlExceptions.getConstraintViolation( >> SqlExceptions.java:91) >> at com.vtlr.backend.row.User.insert(User.java:102) >> at com.vtlr.backend.resource.AnonymousUserResource.createUser( >> AnonymousUserResource.java:85) >> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >> at sun.reflect.NativeMethodAccessorImpl.invoke( >> NativeMethodAccessorImpl.java:62) >> at sun.reflect.DelegatingMethodAccessorImpl.invoke( >> DelegatingMethodAccessorImpl.java:43) >> at java.lang.reflect.Method.invoke(Method.java:483) >> at org.glassfish.jersey.server.model.internal. >> ResourceMethodInvocationHandlerFactory$1.invoke( >> ResourceMethodInvocationHandlerFactory.java:81) >> at org.glassfish.jersey.server.model.internal. >> AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDisp >> atcher.java:151) >> at org.glassfish.jersey.server.model.internal. >> AbstractJavaResourceMethodDispatcher.invoke( >> AbstractJavaResourceMethodDispatcher.java:171) >> at org.glassfish.jersey.server.model.internal. >> JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch( >> JavaResourceMethodDispatcherProvider.java:152) >> at org.glassfish.jersey.server.model.internal. >> AbstractJavaResourceMethodDispatcher.dispatch( >> AbstractJavaResourceMethodDispatcher.java:104) >> at org.glassfish.jersey.server.model.ResourceMethodInvoker. >> invoke(ResourceMethodInvoker.java:387) >> at org.glassfish.jersey.server.model.ResourceMethodInvoker. >> apply(ResourceMethodInvoker.java:331) >> at org.glassfish.jersey.server.model.ResourceMethodInvoker. >> apply(ResourceMethodInvoker.java:103) >> at org.glassfish.jersey.server.ServerRuntime$1.run( >> ServerRuntime.java:271) >> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) >> at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) >> at org.glassfish.jersey.internal.Errors.process(Errors.java:315) >> at org.glassfish.jersey.internal.Errors.process(Errors.java:297) >> at org.glassfish.jersey.internal.Errors.process(Errors.java:267) >> at org.glassfish.jersey.process.internal.RequestScope. >> runInScope(RequestScope.java:297) >> at org.glassfish.jersey.server.ServerRuntime.process( >> ServerRuntime.java:254) >> at org.glassfish.jersey.server.ApplicationHandler.handle( >> ApplicationHandler.java:1028) >> at org.glassfish.jersey.servlet.WebComponent.service( >> WebComponent.java:372) >> at org.glassfish.jersey.servlet.ServletContainer.service( >> ServletContainer.java:381) >> at org.glassfish.jersey.servlet.ServletContainer.doFilter( >> ServletContainer.java:534) >> at org.glassfish.jersey.servlet.ServletContainer.doFilter( >> ServletContainer.java:482) >> at org.glassfish.jersey.servlet.ServletContainer.doFilter( >> ServletContainer.java:419) >> at org.eclipse.jetty.servlet.ServletHandler$CachedChain. >> doFilter(ServletHandler.java:1650) >> at org.eclipse.jetty.servlet.ServletHandler.doHandle( >> ServletHandler.java:583) >> at org.eclipse.jetty.server.handler.ScopedHandler.handle( >> ScopedHandler.java:143) >> at org.eclipse.jetty.security.SecurityHandler.handle( >> SecurityHandler.java:577) >> at org.eclipse.jetty.server.session.SessionHandler. >> doHandle(SessionHandler.java:223) >> at org.eclipse.jetty.server.handler.ContextHandler. >> doHandle(ContextHandler.java:1125) >> at org.eclipse.jetty.servlet.ServletHandler.doScope( >> ServletHandler.java:515) >> at org.eclipse.jetty.server.session.SessionHandler. >> doScope(SessionHandler.java:185) >> at org.eclipse.jetty.server.handler.ContextHandler. >> doScope(ContextHandler.java:1059) >> at org.eclipse.jetty.server.handler.ScopedHandler.handle( >> ScopedHandler.java:141) >> at org.eclipse.jetty.server.handler.HandlerWrapper.handle( >> HandlerWrapper.java:97) >> at org.eclipse.jetty.server.Server.handle(Server.java:485) >> at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:290) >> at org.eclipse.jetty.server.HttpConnection.onFillable( >> HttpConnection.java:248) >> at org.eclipse.jetty.io.AbstractConnection$2.run( >> AbstractConnection.java:540) >> at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob( >> QueuedThreadPool.java:606) >> at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run( >> QueuedThreadPool.java:535) >> at java.lang.Thread.run(Thread.java:745) >> Caused by: org.h2.jdbc.JdbcSQLException: Unique index or primary key >> violation: "PRIMARY KEY ON PUBLIC.USER(ID)"; SQL statement: >> insert into USER (EMAIL, PASSWORD, NAME, OWNED_PERMISSION_ID, OWNER_ID, >> VIEW_ID, EDIT_ID, DELETE_ID, VERSION, LAST_MODIFIED) >> values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [23505-181] >> at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) >> at org.h2.message.DbException.get(DbException.java:179) >> at org.h2.message.DbException.get(DbException.java:155) >> at org.h2.index.PageDataIndex.getNewDuplicateKeyException( >> PageDataIndex.java:165) >> at org.h2.index.PageDataIndex.add(PageDataIndex.java:143) >> at org.h2.table.RegularTable.addRow(RegularTable.java:119) >> at org.h2.command.dml.Insert.insertRows(Insert.java:156) >> at org.h2.command.dml.Insert.update(Insert.java:114) >> at org.h2.command.CommandContainer.update(CommandContainer.java:78) >> at org.h2.command.Command.executeUpdate(Command.java:254) >> at org.h2.jdbc.JdbcPreparedStatement.executeUpdateInternal( >> JdbcPreparedStatement.java:157) >> at org.h2.jdbc.JdbcPreparedStatement.executeUpdate( >> JdbcPreparedStatement.java:143) >> at com.jolbox.bonecp.PreparedStatementHandle.executeUpdate( >> PreparedStatementHandle.java:205) >> at com.mysema.query.sql.dml.SQLInsertClause.executeWithKeys( >> SQLInsertClause.java:302) >> at com.mysema.query.sql.dml.SQLInsertClause.executeWithKey( >> SQLInsertClause.java:186) >> at com.mysema.query.sql.dml.SQLInsertClause.executeWithKey( >> SQLInsertClause.java:169) >> at com.vtlr.backend.row.User.insert(User.java:94) >> ... 45 common frames omitted >> >> If I understand correctly, H2 is complaining that I am inserting a >> duplicate ID. But as you can see, the ID is AUTO_INCREMENT and I am not >> specifying an explicit value (not ever in any place in my code). Any ideas? >> >> This error is intermittent so I've been unable to create a testcase for >> it. >> >> Thanks, >> Gili >> > -- > You received this message because you are subscribed to the Google Groups > "H2 Database" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] > <javascript:_e(%7B%7D,'cvml','h2-database%[email protected]');> > . > To post to this group, send email to [email protected] > <javascript:_e(%7B%7D,'cvml','[email protected]');>. > Visit this group at http://groups.google.com/group/h2-database. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "H2 Database" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/h2-database. For more options, visit https://groups.google.com/d/optout.
