Получить запрос из файла в SPRING BOOT с помощью @Query - PullRequest
0 голосов
/ 05 октября 2018

У меня есть проект, который использует для загрузки запросов это:

@Query(value = SELECT_BY_USER_ID, nativeQuery = true)
Employee findByUserId(@Param("userId") String userId);

В «SELECT_BY_USER_ID» это обычный запрос String.

У меня есть конфигурация YML вне jar, которую я используюзагружать разные конфигурации, и я хочу использовать этот YML, чтобы загружать запросы тоже.

Пример YML:

file:
    query1: SELECT * FROM DUAL;

Но я не знаю, как загрузить напрямую из моего файла в@ Значение запроса, я пытался так:

@Query(value = ("${file.query1}"), nativeQuery = true)
List<Employee> findByCost();

Как я могу сделать?Спасибо.

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

К сожалению, весенние данные не поддерживают прямую ссылку на свойства в @Query anno (как в @Value).Несмотря на это и при условии, что вы используете spring-data-jpa и Hibernate, можно использовать внешний XML-файл для хранения ваших запросов как именованных запросов и обращения к ним по имени метода или как

@Query(nativeQuery = true, name="Repository1.query1")

Этохорошая статья на этот счет: JPA-запросы в XML-файле , и она описывает, как разместить ваш файл .xml в другом месте, чем ожидаемый orm.xml

0 голосов
/ 13 апреля 2019

Если вам нужно загрузить SQL из папки ресурсов, вы можете попробовать библиотеку spring-data-sqlfile .Он поддерживает загрузку SQL-запросов из ресурсов.Так что вам просто нужно поместить ваши SQL-запросы в папку ресурсов, а затем ссылаться на них в аннотации SqlFromResource:

@Repository
public interface UserRepository extends JpaRepository<User, Integer> {
    @SqlFromResource(path = "select_user_by_id.sql")
    User findById(int userId);
}

Вывод будет выглядеть так:

@Repository
public interface UserRepositoryGenerated extends JpaRepository<User, Integer> {    
  @Query(
      value = "SELECT *     FROM users     WHERE id = :userId",
      nativeQuery = true
  )
  User findById(int userId);
}
0 голосов
/ 05 октября 2018

Насколько мне известно, сконфигурированные запросы нельзя загружать из YML.Они могут быть загружены из другого файла.Создайте файл в папке проекта ресурса с именем /META-INF/jpa-named-queries.properties, а затем разместите запрос:

Employee.findById=select * from Employee e where e.id=?1

, а затем вызовите свой запрос:

@Query(name = "Employee.findById")
Employee findByUserId(String id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...