2014-02-01 2 views
2

У меня есть сущность с количеством полей. Мой клиент хочет получить некоторые варианты с переменной where where.JPA-запрос с изменением где статья

Например, на первый раз это может быть

"where name='John' and id_version=5" 

затем имя поле не может использовать на всех

"where id_version=5" 

или могут быть добавлены некоторые новое поле

"where id_version=5 and sex='male'" 

Какова наилучшая практика для ее реализации с использованием репозитория JPA и Spring?

ответ

1

Существует не одна лучшая практика для записи динамических запросов в JPA. Но большинство из лучших практик будут использовать API критериев JPA или альтернативу (например, Querydsl).

Если у вас нет необычных требований, динамическая генерация запросов JPQL с конкатенацией строк не является лучшей практикой (особенно когда параметры вставляются в запрос с конкатенацией строк, вместо использования индексированных или именованных параметров) ,

Поскольку вы используете Spring, Spring Data JPA - отличная библиотека для создания репозиториев JPA. Его можно использовать с API-интерфейсом JPA или с Querydsl. Это может быть немного сложным, если вам нужно только писать динамические запросы для одного объекта, но это становится очень полезным, когда у вас есть это требование для многих объектов.

+0

Я использую Spring JPA сейчас, но я не могу найти, как создать динамически измененные запросы, используя эту фреймворк. – wolandec

+1

@wolandec Вот связанный блог-сайт http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/ –

1

Данные Spring и Querydsl были бы хорошими для этого случая. Использование Querydsl расширение репозиториев для Вас выразить свои фильтры как этот

repository.findAll(entity.name.eq("John").and(entity.idVersion.eq(5))) 

repository.findAll(entity.idVersion.eq(5)) 

repository.findAll(entity.idVersion.eq(5).and(entity.sex.eq("male"))) 

Здесь также родственный Блогпост http://spring.io/blog/2011/04/26/advanced-spring-data-jpa-specifications-and-querydsl/

Этот ответ предвзято, так как я занимаюсь с проектом Querydsl.

+0

У нас были некоторые проблемы с сохранением объектов с составными первичными ключами используя Querydsl. На самом деле Querydsl не было проблемой. Проблема лежала в версии Spring Data Framework, которую Querydsl заказал для себя. – wolandec

+0

http://stackoverflow.com/questions/22557138/spring-mvc-failed-to-convert-property-value-of-type-java-lang-integer это проблема. – wolandec