Существует ли (реальная) разница между fetchAny()
и fetchOne()
? Оба возвращают точную одну запись. Документация по API одинакова, но реализация (в github) отличается.
JOOQ - разница между fetchAny и fetchOne
Ответ 1
Цель двух методов различна:
-
Возвращает:
Результирующая запись или ноль, если запрос не возвращает записей.
Броски:
TooManyRowsException
- если запрос возвратил больше чем одну запись -
Возвращает:
Первая результирующая запись или ноль, если запрос не возвращает записей.
По сути, когда вы используете fetchOne()
запрос должен возвращать 0 или 1 запись. Когда вы используете fetchAny()
запрос может вернуть любое количество записей, и, если база данных вернет какую-либо запись, будет возвращена первая, извлеченная из результирующего набора JDBC.
Обратите внимание на то, что fetchOne()
, таким образом попытаться принести 2 записи из драйвера JDBC (решить, будет ли TooManyRowsException
нужно быть выброшен), в то время как fetchAny()
получает только самое большее 1 запись.
Ответ 2
javadoc объясняет разницу. fetchAny()
возвращает первую запись, тогда как fetchOne()
ожидает, что запрос вернет ноль или одну запись, и выдает исключение, если запрос возвратил более одной записи.