пружинные данные jpa @EntityGraph метод с результатом Collection бросает BeanCreationException - PullRequest
0 голосов
/ 31 января 2019

вложенное исключение: org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем 'cityDao': сбой вызова метода init;Вложенным исключением является java.lang.IllegalArgumentException: не удалось создать запрос для метода public abstract java.util.List com.server.repository.location.CityDao.findAllWithCountry ()!Не найдено свойство findAllWithCountry для типа City!

@Transactional
public interface CityDao extends JpaRepository<City, Integer> {
    @EntityGraph(attributePaths = "country")
    List<City> findAllWithCountry(); //this one does not work

    @EntityGraph(attributePaths = "country")
    City findOneWithCountryById(int id); //this one works
}

Сущность:

@Entity
@Table(name = "city", uniqueConstraints = {
        @UniqueConstraint(columnNames = {"country", "city_name", "latitude", "longitude"})
})
@Data
public class City {
    @ManyToOne(fetch = FetchType.LAZY)
    @NotNull
    @JoinColumn(name = "country")
    private Country country;
}

Я пытаюсь реализовать @EntityGraph для повышения производительности API.Первый метод выдает BeanCreationException, пока работает второй.Разница лишь в том, что первый возвращает коллекцию, а второй возвращает одну сущность.Есть ли способ это исправить?

1 Ответ

0 голосов
/ 01 февраля 2019

Ключевая проблема не в атрибуте country для City, посмотрите на трассировку стека:

No property findAllWithCountry found for type City!

Это означает, что он вообще не может получить запрос , не говоря уже о том, чтобы найти атрибут country.

Вы можете переопределить значение по умолчанию findAll:

@EntityGraph(attributePaths = "country")
@Override
List<City> findAll();

, которое будет применять эту оптимизацию ко всем вашим findAll.

Когда я сталкивался с этим в прошлом (где я хочу иметь несколько производных методов с одинаковыми свойствами запроса, но разными аннотациями), нужно написать , настроить базовый репо или написатьзапрос с @Query.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...