Как выполнить нативные SQL-запросы, используя Spring во время выполнения в Java? - PullRequest
0 голосов
/ 11 апреля 2019

Итак, есть ли методы для выполнения собственных запросов SQL из интерфейса Repository?

Да, я знаю об аннотации @Query, но как выполнять запросы, которые можно изменить во время выполнения?Как в JDBC executeQuery() методе?

Ответы [ 3 ]

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

Если вы имеете в виду использование Spring Data, вы можете сделать что-то вроде:

@Query(value = "SELECT p from Person p where r.name = :person_name")
Optional<Person> findPersonByName(@Param("person_name") String personName);

Вы также можете использовать собственный запрос:

@Query(value = "select * from person p where r.name = :person_name")", nativeQuery = true)
enter code here
0 голосов
/ 11 апреля 2019

Вы можете использовать Спецификацию с вашим JpaRepository для создания динамического запроса, построенного во время выполнения.

Добавить JpaSpecificationExecutor в интерфейс JpaRepository ...

@Repository
public interface MyRepo extends JpaRepository<MyEntity, Long>, JpaSpecificationExecutor {
}

Затем создайте класс со статическим методом, который возвращает спецификацию ....

public class MyEntitySearchSpec {
  private MyEntitySearchSpec() {
    // Remove this private constructor if need to add public non-static methods.
  }

  public static Specification<MyEntity> myEntitySearch(
      final mysearchCriteria MySearchCriteria) {
    return (root, query, cb) -> {
      List<Predicate> predicates = new ArrayList<>();

      if (mysearchCriteria.isOnlyActive()) {
        predicates.add(cb.isNull(root.get("closeDate")));
      }

      if (mysearchCriteria.getCaseNumber() != null) {
        predicates.add(cb.equal(root.get("caseNumber"),
            mysearchCriteria.getCaseNumber()));
      }

      return cb.and(predicates.toArray(new Predicate[] {}));
    };
  }
}

Вы можете позвонить, как это ...

myRepo.findAll(myEntitySearch(mysearchCriteria));
0 голосов
/ 11 апреля 2019

Реализуйте JpaRepository и используйте

@PersistenceContext
private EntityManager em;

, чтобы использовать все возможности Java для создания query типа string, а затем:

 final Query emQuery = em.createNativeQuery(query);
 final List<Object[]> resultList = emQuery.getResultList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...