Spring Data JPA - Создание генератора пользовательских методов запросов - PullRequest
1 голос
/ 23 сентября 2019

В Spring Data JPA мы можем определить интерфейс репозитория, расширяющий Repository, и написать собственный метод.

Если этот метод следует специальному синтаксису, Spring Data автоматически сгенерирует тело метода.

Например (из документации):

interface PersonRepository extends Repository<Person, Long> {
    List<Person> findByLastname(String lastname);
}

Есть ли способ настроить код генерации метода для введения новых ключевых слов в синтаксис?

Например:

Person findExactlyOneById(Long id);

Этот метод либо возвращает сущность, либо выдает пользовательское исключение.

Я знаю, что могу настроить определенные репозитории, а также базовый репозиторий и добиться эффекта из приведенного выше примера, но я специальнозапрашивая автоматический метод генерации тела.

Есть ли точка расширения, разработанная в рамках?Или это единственный вариант изменить исходный код?

Ответы [ 2 ]

0 голосов
/ 23 сентября 2019

Вы можете установить nativeQuery = true в аннотации @Query из класса Repository следующим образом:

public static final String FIND_PROJECTS = "SELECT projectId, projectName FROM projects";

@Query(value = FIND_PROJECTS, nativeQuery = true)
public List<Object[]> findProjects();

Вероятно, стоит взглянуть и на данные Spring документы .

Еще несколько примеров 1.

public interface UserRepository extends JpaRepository<User, Long> {

  @Query(value = "SELECT * FROM USERS WHERE EMAIL_ADDRESS = ?1", nativeQuery = true)
  User findByEmailAddress(String emailAddress);
}
0 голосов
/ 23 сентября 2019

В вашем случае вы всегда можете использовать CrudRepository.findById(Long id) или JpaRepository.getOne(Long id).Я бы предложил наследовать от класса JpaRepository, потому что включены все типы репозиториев.

...