I have a many-to-many relationship with book, book_author and author 
tables. The book and author table have version column and I have configured 
the optimistic locking option to true. The book_author table just has the 
book_id and author_id fields. On executing the below statement 

BookAuthorRecord bookAuthorRecord = new BookAuthorRecord(1,1);
DSL.using(configuration).batchDelete(bookAuthorRecord).execute();


I get the below error:

Exception in thread "main" org.jooq.exception.DataAccessException: SQL [select 
`book_author`.`book_id`, `book_author`.`author_id` from `book_author` where 
(`book_author`.`book_id` = ? and `book_author`.`author_id` = ?) for update]; 
Can not issue executeUpdate() or executeLargeUpdate() for SELECTs
        at org.jooq.impl.Tools.translate(Tools.java:1941)
        at 
org.jooq.impl.DefaultExecuteContext.sqlException(DefaultExecuteContext.java:659)
        at org.jooq.impl.BatchSingle.executePrepared(BatchSingle.java:259)
        at org.jooq.impl.BatchSingle.execute(BatchSingle.java:182)
        at org.jooq.impl.BatchCRUD.executePrepared(BatchCRUD.java:159)
        at org.jooq.impl.BatchCRUD.execute(BatchCRUD.java:100)
        at com.jooq.JooqSampleTest.main(JooqSampleTest.java:37)
        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:498)
        at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Caused by: java.sql.BatchUpdateException: Can not issue executeUpdate() or 
executeLargeUpdate() for SELECTs
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
        at com.mysql.jdbc.Util.getInstance(Util.java:387)
        at 
com.mysql.jdbc.SQLError.createBatchUpdateException(SQLError.java:1161)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1773)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchInternal(PreparedStatement.java:1257)
        at com.mysql.jdbc.StatementImpl.executeBatch(StatementImpl.java:958)
        at 
org.jooq.tools.jdbc.DefaultStatement.executeBatch(DefaultStatement.java:93)
        at org.jooq.impl.BatchSingle.executePrepared(BatchSingle.java:239)
        ... 9 more
Caused by: java.sql.SQLException: Can not issue executeUpdate() or 
executeLargeUpdate() for SELECTs
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860)
        at 
com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2045)
        at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1751)
        ... 13 more


But if I try to delete on the record, it works fine, so the below works:

BookAuthorRecord bookAuthorRecord = new BookAuthorRecord(1,1);
bookAuthorRecord.attach(configuration);
bookAuthorRecord.refresh();
bookAuthorRecord.delete();


I would like to know how I can do bulk deletes for junction table which does 
not have the version column and I have configured optimistic 

locking to true.


-- 
You received this message because you are subscribed to the Google Groups "jOOQ 
User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to