@Override public int[] execute() { if(entities.isEmpty()) { return new int[0]; } prepare(); String[] fields = entities.get(0).getKey().getFieldNames().toArray(Arrays2.EMPTY_STRING_ARRAY); if(fields.length == 0) { throw new IllegalStateException("No insert fields"); } final SqlCommand primaryCommand = context.getSqlFactory().createInsertCommand(context, em, fields); final SqlCommand secondaryCommand = em.hasSecondaryTable() ? context.getSqlFactory().createInsertCommand(context, em, fields, true) : null; Map[] records = toRecords(); if(null == secondaryCommand) { return primaryCommand.executeBatchUpdate(this, records); } if(null == primaryCommand) { return secondaryCommand.executeBatchUpdate(this, records); } return dao.doTransaction((s) -> { int[] result = primaryCommand.executeBatchUpdate(this, records); secondaryCommand.executeBatchUpdate(this, records); return result; }); }