@Override public final <T> int update(final T object) throws OrmException { @SuppressWarnings("unchecked") final IOrmClassTool<T> ormClassTool = (IOrmClassTool<T>) this.getOrmClassToolMap().getOrmClassTool(object.getClass()); final SqlPerformer sqlExec = this.sqlPerformer(); //CHECK IF OBJECT HAS A 'VERSION' FIELD if (ormClassTool.getClassMapper().getTableMap().isVersionable()) { final int rightVersion = sqlExec.queryForInt(ormClassTool.getOrmCRUDQuery().getBeanVersionQuery(), ormClassTool.getOrmPersistor().primaryKeyAndVersionValues(object)); if ( rightVersion==0 ) { throw new OrmOptimisticLockException("The bean of class [" + object.getClass() + "] cannot be updated. Version in the DB is not the expected one."); } ormClassTool.getOrmPersistor().increaseVersion(object, false); } //UPDATE OBJECT final Object[] pkArgs = ormClassTool.getOrmPersistor().primaryKeyValues(object); final Object[] npkArgs = ormClassTool.getOrmPersistor().notPrimaryKeyValues(object); final Object[] args = new Object[ npkArgs.length + pkArgs.length ]; int i=0; for (final Object value : npkArgs) { args[i++] = value; } for (final Object value : pkArgs) { args[i++] = value; } return sqlExec.update(ormClassTool.getOrmCRUDQuery().getUpdateQuery(), args); }