Я использовал стандартную реализацию JPA на некоторое время и не имел проблем с созданием динамических запросов, возникающих в результате алгоритмов поиска пользователей в базе данных. Однако мы переходим к Spring Framework (к сожалению, более старая версия - 3.2), и я просто не могу понять, как создать динамический запрос весной.Создать динамический запрос весной
С javax.persistance.EntityManager
, я мог бы позвонить createQuery
и дать ему строку для работы. Тем не менее, я обнаружил, что весной я могу использовать только что-то вроде следующего кода, где я определяю запрос в аннотации.
@Repository
@SuppressWarnings("unused")
public interface PersonRepository extends JpaRepository<Person, Long>, CrudRepository<Person, Long> {
@Override
List<Person> findAll(Sort sort);
@Override
List<Person> findAll();
@Query("SELECT p FROM Person p ORDER BY p.lname ASC, p.fname ASC, p.mname ASC")
List<Person> findAllSort();
@Query("SELECT p FROM Person p WHERE UPPER(p.userName) = UPPER(?1)")
Person findPersonByUsername(String username);
}
Вот простейший динамический пример запроса я мог бы дать вам, что я хотел бы повторить на весну:
public List<Person> getPersons(List<Long> perIds) {
List<Person> persons;
String whereClause = "";
for (int i = 0; i < perIds.size(); i++) {
if (i != 0)
whereClause += " OR ";
whereClause += "p.perId = '" + perIds.get(i) + "'";
}
persons = em.createQuery("SELECT p FROM Person p WHERE " + whereClause).getResultList();
return persons;
}
Может быть, лучше вопрос здесь спросить если это возможно, или я должен просто сохранить свою реализацию с помощью Менеджера сущностей. Это, как говорится, кто-нибудь recomend меня, чтобы изменить мой код с помощью EntityManager до использования Spring Framework?
Можете ли вы выяснить это немного? Может быть, пример того, что вы хотите сделать? Когда вы говорите «переход от менеджера сущности к весеннему фрейму» ... это не имеет для меня никакого смысла, они не являются взаимоисключающими понятиями или даже обязательно связаны. – zmf
То, что я действительно надеялся найти, было то, что Spring может иметь собственную реализацию метода createQuery, чтобы я мог выполнять либо JPA, либо наивный запрос. Однако, если Spring не предлагает собственную реализацию функции createQuery, я могу просто сохранить текущую реализацию. –