private BEAN save(final BEAN bean) {
final Persistor<BEAN> persistor = ormClassTool.getPersistor();
final BEAN updatedBean = persistor.increaseVersion(bean, true);
final boolean useGenerator = ormClassTool.getPersistor().useGenerators(updatedBean);
final String sql = getCacheableQuery(useGenerator);
if (!useGenerator) {
final String[] keys = ormClassTool.getDescriptor().getAllColumnJavaNames();
sqlExecutor.update(sql, statement -> persistor.setBeanValuesToStatement(keys, updatedBean, statement, 0));
return updatedBean;
} else {
final GeneratedKeyReader<BEAN> generatedKeyExtractor = GeneratedKeyReader.get(ormClassTool.getDescriptor().getAllGeneratedColumnDBNames(),
(final ResultSet generatedKeyResultSet, Integer affectedRows) -> {
BEAN result = updatedBean;
if (generatedKeyResultSet.hasNext()) {
result = persistor.updateGeneratedValues(generatedKeyResultSet.next(), result);
}
return result;
});
final String[] keys = ormClassTool.getDescriptor().getAllNotGeneratedColumnJavaNames();
return sqlExecutor.update(sql, statement -> persistor.setBeanValuesToStatement(keys, updatedBean, statement, 0), generatedKeyExtractor);
}
}