setMaxResults pour le Printemps-Data-JPA annotation?
Je suis en train d'intégrer Spring-Data-JPA dans mon projet.
Une chose qui me confond est comment puis-je obtenir setMaxResults(n) par l'annotation ?
par exemple, mon code:
public interface UserRepository extends CrudRepository<User , Long>
{
@Query(value="From User u where u.otherObj = ?1 ")
public User findByOhterObj(OtherObj otherObj);
}
J'ai seulement besoin de retourner one (and only one)
Utilisateur de otherObj, mais je ne peux pas trouver une façon d'annoter le maxResults. Quelqu'un peut-il me donner un indice ?
(mysql se plaint :
com.mysql.jdbc.JDBC4PreparedStatement@5add5415: select user0_.id as id100_, user0_.created as created100_ from User user0_ where user0_.id=2 limit ** NOT SPECIFIED **
WARN util.JDBCExceptionReporter - SQL Error: 0, SQLState: 07001
ERROR util.JDBCExceptionReporter - No value specified for parameter 2
)
J'ai trouvé un lien : https://jira.springsource.org/browse/DATAJPA-147,
J'ai essayé, mais a échoué. Il ne semble pas possible maintenant?
Pourquoi est une caractéristique importante n'est pas intégrée dans le Printemps de Données?
Si je mettre en œuvre cette fonction manuellement:
public class UserRepositoryImpl implements UserRepository
J'ai à mettre en œuvre des tonnes de méthodes prédéfinies dans CrudRepository
, ce serait terrible.
environnements : printemps-3.1 , spring-data-jpa-1.0.3.RELEASE.jar , spring-data-commons-core-1.1.0.RELEASE.jar
Vous devez vous connecter pour publier un commentaire.
De Spring Data JPA 1.7.0 (Evans communiqué de train).
Vous pouvez utiliser le nouvellement introduit
Top
etFirst
les mots-clés qui vous permettent de définir des méthodes de requête comme ceci:Printemps de Données permettra de limiter automatiquement les résultats vers le numéro que vous avez défini (par défaut 1 si omis). Notez que l'ordre des résultats devient pertinente ici (que ce soit par le biais d'un
OrderBy
clause comme on le voit dans l'exemple ou par la remise d'unSort
paramètre dans la méthode). Lire plus à ce sujet dans le blog couvrant les nouvelles fonctionnalités du Printemps de Données Evans libération train ou dans le la documentation.Pour les versions précédentes
Pour récupérer uniquement les tranches de données, le Printemps de Données utilise la pagination de l'abstraction qui est livré avec un
Pageable
interface sur le requérant côté ainsi qu'unPage
abstraction sur le résultat côté des choses. Donc, vous pourriez commencer avecet de l'utiliser comme ceci:
Si vous avez besoin de connaître le contexte de la suite (la page est-il réellement? est-il le premier? combien sont-ils au total?), utilisation
Page
comme type de retour:Le code client peut alors faire quelque chose comme ceci:
Pas que nous allons déclencher un compte de projection de la requête à exécuter dans le cas où vous utilisez
Page
comme type de retour que nous avons besoin de savoir combien d'éléments il y a au total pour calculer les métadonnées. Au-delà de cela, assurez-vous de réellement équiper laPageRequest
avec le tri de l'information pour obtenir des résultats stables. Sinon, vous risquez de déclencher la requête de deux fois et obtenir des résultats différents, même sans les données ayant changé dessous.Query
instance. Pour le compte de la requête, nous nous fournisseur d'API spécifiques à l'extrait de la requête JPQL à partir de la source de la requête et ensuite appliquer le comte de projection sur elle.List
que le type de retour de la méthode.Top
etFirst
mots-clés ne sont pas applicables aux méthodes qui utilisent@Query
annotation? Seuls ceux qui utilisent la méthode basée sur le nom de génération de requête?Si vous utilisez Java 8 et le Ressort des Données de la version 1.7.0, vous pouvez utiliser les méthodes par défaut si vous souhaitez combiner un
@Query
annotation avec réglage maximum de résultats:Stream<User> ... {...} default Optional<User> ... { ...findAny() }
Il ya une façon que vous pouvez fournir l'équivalent d'un "setMaxResults(n) par l'annotation" comme dans les suivants:
Cela devrait faire l'affaire, quand un paginable est envoyé en paramètre.
Par exemple pour récupérer les 10 premiers enregistrements, vous devez définir le paginable à cette valeur:
L'utilisation de Données du Printemps Evans (1.7.0 COMMUNIQUÉ)
la nouvelle version de Spring Data JPA avec une autre liste de modules appelés Evans a la caractéristique de l'utilisation de mots-clés
Top20
etFirst
de limiter le résultat de la requête,donc, vous pouvez maintenant écrire
ou
ou pour un résultat unique
Pageable
objet. découvrez printemps de la documentationMeilleur choix pour moi est de requête native:
nativeQuery
paramètre annotation ajoutée de ne pas ignorer.Il est également possible à l'aide de @QueryHints. Exemple ci-dessous utilise org.eclipse.la persistance.config.QueryHints#JDBC_MAX_ROWS
@QueryHints({@QueryHint(name = org.hibernate.annotations.FETCH_SIZE, value = "1")})
en veille prolongée, mais alias:( ne fonctionne pasSi votre classe
@Repository
s'étendJpaRepository
vous pouvez utiliser l'exemple ci-dessous.getContent retour d'un
List<Transaction>
.