Вот решение, с которым я столкнулся:
public class DogTypeArgumentFactory implements ArgumentFactory {
@Override
public Optional<Argument> build(Type type, Object value, ConfigRegistry config) {
if (value == null || !type.getTypeName().equals(DogType.class.getName())) {
return Optional.empty();
}
return Optional.of(new DogTypeArgument((DogType) value));
}
private class DogTypeArgument implements Argument {
private final DogType value;
private DogTypeArgument(DogType value) {
this.value = value;
}
@Override
public void apply(
int position, PreparedStatement statement, StatementContext context) throws SQLException {
statement.setInt(position, value.getValue());
}
}
}
Это выглядит немного скучно, если мне нужно использовать его для каждого постоянного значения enum ... Я полагаю, что все они могут использовать общий интерфейс, если это работает.