J'utilise Spring JPA pour effectuer toutes les opérations de base de données. Cependant, je ne sais pas comment sélectionner des colonnes spécifiques à partir d'une table dans Spring JPA?
Par exemple:
SELECT projectId, projectName FROM projects
java
jpa
spring-data-jpa
user1817436
la source
la source
Réponses:
Vous pouvez définir
nativeQuery = true
dans l'@Query
annotation à partir d'uneRepository
classe comme celle-ci:Notez que vous devrez cependant faire le mappage vous-même. Il est probablement plus facile d'utiliser simplement la recherche mappée régulière comme celle-ci, sauf si vous n'avez vraiment besoin que de ces deux valeurs:
Cela vaut probablement la peine de consulter également les documents de données Spring .
la source
FIND_PROJECTS
) avec levalue
nom de l' attribut (donc si c'était mon code, j'aurais dû l'écrire comme@Query(value = FIND_PROJECTS, nativeQuery = true)
, etc.Vous pouvez utiliser des projections de Spring Data JPA (doc) . Dans votre cas, créez une interface:
et ajoutez la méthode suivante à votre référentiel
la source
Je n'aime pas particulièrement la syntaxe (elle a l'air un peu hacky ...) mais c'est la solution la plus élégante que j'ai pu trouver (elle utilise une requête JPQL personnalisée dans la classe de référentiel JPA):
Alors bien sûr, il vous suffit de fournir un constructeur pour
Document
qui acceptedocId
& enfilename
tant que constructeur args.la source
Dans ma situation, je n'ai besoin que du résultat json, et cela fonctionne pour moi:
dans le contrôleur:
la source
Object
par une interface personnalisée comme décrit par mpr. fonctionne parfaitementDans mon cas, j'ai créé une classe d'entité distincte sans les champs qui ne sont pas obligatoires (uniquement avec les champs obligatoires).
Mappez l'entité sur la même table. Maintenant, lorsque toutes les colonnes sont requises, j'utilise l'ancienne entité, lorsque seules certaines colonnes sont requises, j'utilise l'entité lite.
par exemple
Vous pouvez créer quelque chose comme:
Cela fonctionne lorsque vous connaissez les colonnes à récupérer (et cela ne changera pas).
ne fonctionnera pas si vous devez décider dynamiquement les colonnes.
la source
Je suppose que le moyen le plus simple est d'utiliser QueryDSL , fourni avec Spring-Data.
En utilisant votre question, la réponse peut être
Le gestionnaire d'entités peut être câblé automatiquement et vous travaillerez toujours avec des objets et des classes sans utiliser le langage * QL.
Comme vous pouvez le voir dans le lien, le dernier choix me semble, presque pour moi, plus élégant, c'est-à-dire utiliser DTO pour stocker le résultat. Appliquez à votre exemple qui sera:
Définition de ProjectDTO comme:
la source
Avec les nouvelles versions de Spring, on peut faire ce qui suit:
Si vous n'utilisez pas de requête native, cela peut être fait comme ci-dessous:
En utilisant la requête native, la même chose peut être faite comme ci-dessous:
Pour plus de détails, consultez la documentation
la source
À mon avis, c'est une excellente solution:
et l'utiliser comme ça
la source
En utilisant Spring Data JPA, il est possible de sélectionner des colonnes spécifiques dans la base de données
---- Dans DAOImpl ----
---- En Repo ----
Cela a fonctionné à 100% dans mon cas. Merci.
la source
Vous pouvez utiliser JPQL:
ou vous pouvez utiliser une requête SQL native.
la source
Il est possible de spécifier
null
comme valeur de champ dans SQL natif.la source
Vous pouvez appliquer le code ci-dessous dans votre classe d'interface de référentiel.
la source
Utilisation de la requête native:
la source
Vous pouvez utiliser la réponse suggérée par @jombie, et:
findAll()
méthode à cet effet mais utilisez le nom de votre choix;List
paramétré avec votre nouvelle interface (par exempleList<SmallProject>
).la source