Как изменить имена методов из jpa-репозитория? - PullRequest
0 голосов
/ 15 ноября 2018

Есть приложение Spring + jpa (репозитории). Entity:

@Entity
@Getter
@Setter
@NoArgsConstructor
public class User{
  private int id;
  private String name;
  private String surname;
  private int age;
}

Итак, мой репозиторий выглядит так:

@Repository
public interface UserRepository extends CrudRepository<User, Integer>{
  public List<User> findUsersByNameAndAge(String name, int age);
  public List<User> findUsersByNameAndSurname(String name, String surname);
}

В моем реальном коде продукта слишком многоparams, поэтому этот метод-имя слишком длинное и неудобное.Есть ли способ сделать из длинных имен методов удобные опции, например, просто найти?

1 Ответ

0 голосов
/ 15 ноября 2018

Использовать по умолчанию Функция Java 8 для переноса:

например:

   interface UserRepository extends JpaRepository<User, Long> {
  // don't use that crazy long method! use getByEmail instead
  User findFirstByEmailContainsIgnoreCaseAndField1NotNullAndField2NotNullAndField3NotNullAndField4NotNullAndField5NotNullAndField6NotNull(final String email);

  default User getByEmail(final String email) {
    return findFirstByEmailContainsIgnoreCaseAndField1NotNullAndField2NotNullAndField3NotNullAndField4NotNullAndField5NotNullAndField6NotNull(email);
  }
}

Вы можете найти полную ссылку здесь: https://github.com/daggerok/spring-data-examples/blob/master/shadov/src/main/java/daggerok/ShadovApplication.java

Или вы можете указать любое имя метода и добавить аннотацию @ Query со значением параметра, которое содержит требуемый запрос к базе данных, например:

@Query(value="select u from User u where u.deleted=false and u.email=:email")
User findOneByEmail(@Param("email")String email);
or, with native sql query:

@Query(value="SELECT * FROM users WHERE deleted=false AND email=?1", nativeQuery=true)
User findOneByEmail(String email);

Вы также можете использовать имена, соответствующие соглашению об именах, для запросов, поскольку аннотация @Query будет иметь приоритет над запросом из имени метода.

...