Lorsque nous utilisons Spring JPA pour la récupération des relations entre entités, nous devons parfois limiter les résultats pour répondre à des besoins commerciaux spécifiques. Dans cet article, nous expliquerons comment utiliser Spring JPA pour récupérer des relations d'entités restreintes. En utilisant les annotations et les méthodes de requête fournies par Spring JPA, nous pouvons facilement implémenter des restrictions sur les relations entre entités, améliorant ainsi l'efficacité et la précision des requêtes. Que vous soyez un développeur débutant ou expérimenté, cet article vous fournira des conseils clairs et des exemples pratiques pour vous aider à mieux comprendre et appliquer les capacités de récupération de relations d'entité de Spring JPA.
Il s'agit d'un problème d'optimisation concernant les relations et les allers-retours dans la base de données.
tl;dr : Vous avez deux entités a et b, qui ont une relation plusieurs-à-plusieurs. Vous devez récupérer une instance de a et un sous-ensemble spécifique de ses entités b associées. C'est la partie importante, vous ne voulez pas récupérer toutes les entités a liées à cette instance b, mais seulement un sous-ensemble d'entre elles.
Appel long
Considérez les entités suivantes :
public class a { @id private long id; @manytomany private list<b> blist; }
public class B { @Id private Long id; @ManyToMany private List<A> aList; private Boolean somePropertyToUseWhileFiltering; }
En théorie tout cela devrait fonctionner, j'utilise actuellement la deuxième méthode mais j'ai un souci. Est-il dangereux d'effectuer plusieurs appels de référentiel vers différents référentiels pour une seule requête ? Parce que j'ai une structure d'entité complexe avec de nombreuses relations. Je suppose que cela augmentera le nombre d'allers-retours vers la base de données.
Existe-t-il un autre moyen plus approprié de résoudre ce problème ?
Solution de contournement
public interface awithfilteredblistprojection { long getid(); list<bprojection> getfilteredblist(); interface bprojection { string getsomepropertytousewhilefiltering(); // add other properties from b that you want to include } }
Dépôt
public interface ARepository extends JpaRepository<A, Long> { @Query("SELECT a FROM A a JOIN FETCH a.bList b WHERE a.id = :aId") Optional<AWithFilteredBListProjection> findAWithFilteredBList(@Param("aId") Long aId); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!