Я выполняю различные запросы JPA в виде
Float getDepositVolumeByDepositIdDepositAndSpeciesIdSpeciesAndRangeIdRangeAndSubRangeIdSubrange(Long idDeposit, Long idSpecies, Long idRange, Long idSubRange); // this is one of the methods that fail
@Query("select stock.depositVolume from Stock s where s.deposit.idDeposit = ?1 and s.species.idSpecies = ?2 and s.range.idRange = ?3 and s.subrange.idSubrange = ?4")
Float getVolumeByDepositIdDepositAndSpeciesIdSpeciesAndRangeIdRangeAndSubRangeIdSubrange(Long idDeposit, Long idSpecies, Long idRange, Long idSubRange); // this one is just for ilustrative purpose and throws the exact same error
Эти два запроса являются лишь некоторыми из тех, которые должны возвращать одну строку. Хотя в базе данных есть только одна строка, соответствующая данным, предоставленным для запроса, hibernate выдает следующее сообщение об ошибке:
Результат возвращает более одного элемента
Я включил журнал запросов гибернации, и для первого метода был сгенерирован следующий запрос:
select stock0_volume_stock as col_0_0_ from public.stock stock0_ where stock0_.id_deposit = ? and stock0_.id_species = ? and stock0_.id_range = ? and stock0_.id_sub_range = ?
с правильно связанными параметрами. Я запустил запрос на PostGres, и он возвращает только одну строку с float
.
Стоит отметить, что мое объявление класса:
public interface StockRepository extends QueryDslPredicateExecutro<Stock>, JpaRepository<Stock, long>
Что я закончил, так это изменил эти методы на
List<Stock> findFirstByDepositIdDepositAndSpeciesIdSpeciesAndRangeIdRangeAndSubRangeIdSubrange(Long idDeposit, Long idSpecies, Long idRange, Long idSubRange); // now it justly returns only one row, the first one
Я обычно предполагаю, и, конечно, в предыдущих проектах это наблюдалось, что первый метод должен отображать единственный результат, полученный из базы данных , в ожидаемый float
Мне очень интересно, чем объясняется такое поведение.