@NamedQuery remplacer findAll au Printemps de Données Reste JpaRepository
Est-il un moyen de remplacer la findAll requête exécutée par le Printemps des Données Reste?
J'ai besoin d'un moyen de filtrer les résultats en fonction de certains critères spécifiques, et il semble que l'utilisation d'un @NamedQuery
devrait être le long des lignes de ce que je cherche j'ai donc l'installation d'un test.
@Entity
@Table(name = "users")
@NamedQueries({
@NamedQuery(name = "User.findAll", query="SELECT u FROM User u WHERE u.username = 'test'"),
@NamedQuery(name = "User.findNameEqualsTest", query="SELECT u FROM User u WHERE u.username = 'test'")
})
public class User implements Serializable, Identifiable<Long> { }
Dans ce lieu je m'attends DTS pour utiliser mon findAll() requête (retour 1 résultat), mais au lieu de cela, il exécute la même vieille findAll logique (le retour de tous les résultats).
Dans mon Référentiel, j'ai ajouté:
@Repository
@RestResource(path = "users", rel = "users")
public interface UserJpaRepository extends JpaRepository<User, Long> {
public Page<User> findNameEqualsTest(Pageable pageable);
}
et dans ce cas, il NE ramasser la condition @NamedQuery
. Alors...
Comment dois-je aller sur le remplacement du défaut findAll()
logique? J'ai besoin de construire un ensemble complexe de critères et de l'appliquer à l'ensemble de résultats.
OriginalL'auteur Ethan Anderson | 2014-02-12
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez créer votre mise en Œuvre de votre Référentiel d'interface, il est acouple section dans
http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/repositories.html#repositories.custom-implementations
Référentiel
Interface Personnalisée
Personnalisé de mise en œuvre
Au lieu de remplacer enregistrer le faire avec findAll, alors vous pouvez créer de la complexité de la personnalisation
En effet, c'est un problème très commun, a demandé à plusieurs reprises dans SOverflow, tutoriel devrait inclure une note il y
Comme de Spring Data JPA 1.5 la coutume de la mise en œuvre ne sera plus nécessaire pour atteindre cet objectif. Voir ma réponse pour plus de détails.
c'est ne sera pas nécessaire, il ne signifie pas la réponse n'est pas correcte, mais les sons d'une grande nouvelle version de trucs
OriginalL'auteur Koitoer
Dans la prochaine version 1.5 (un RC est disponible dans notre jalon dépôts) de Spring Data JPA vous pouvez simplement redeclare la méthode dans votre référentiel d'interface et de les annoter avec
@Query
de sorte que l'exécution en tant que méthode de recherche est déclenchée. Cela va alors provoquer la requête nommée à être regardé, comme vous en avez déjà utilisé à partir de méthodes de requête:Quelques notes sur votre dépôt de la déclaration:
@Repository
. Cette annotation n'a pas le moindre effet ici.@RestResource
annotation configure l'exportateur d'une manière qui sera la valeur par défaut de toute façon, au Printemps de Données RESTE 2.0 (aussi dans le RC). Ging avant, préférez@RestRepositoryResource
, mais comme je l'ai dit: la pluralisation sera la valeur par défaut de toute façon.CrudRepository
ouPagingAndSortingRepository
.OriginalL'auteur Oliver Drotbohm