protected PreparedStatement prepareStatementAndSetParameters(SQLSerializer serializer,
boolean withKeys) throws SQLException {
listeners.prePrepare(context);
queryString = serializer.toString();
constants = serializer.getConstants();
logQuery(logger, queryString, constants);
PreparedStatement stmt;
if (withKeys) {
if (entity.getPrimaryKey() != null) {
String[] target = new String[entity.getPrimaryKey().getLocalColumns().size()];
for (int i = 0; i < target.length; i++) {
Path<?> path = entity.getPrimaryKey().getLocalColumns().get(i);
String column = ColumnMetadata.getName(path);
target[i] = column;
}
stmt = connection().prepareStatement(queryString, target);
} else {
stmt = connection().prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS);
}
} else {
stmt = connection().prepareStatement(queryString);
}
setParameters(stmt, serializer.getConstants(), serializer.getConstantPaths(),
metadata.getParams());
context.addPreparedStatement(stmt);
listeners.prepared(context);
return stmt;
}