2017-07-26 3 views
1

J'ai utilisé les méthodes par défaut du référentiel JPA CRUD telles que find, findAll, delete, etc. pour toutes mes opérations de base de données.Recherche d'un nombre d'entités enfants utilisant JPA CRUD Repository

En ce moment, j'ai deux entités:

@Entity 
public class Parent implements Serializable { 

    @Id 
    @GeneratedValue 
    private long id; 

    @OneToMany(mappedBy = "parent", cascade = CascadeType.REMOVE) 
    private Set<Child> children; 
} 

@Entity 
public class Child implements Serializable { 

    @Id 
    @GeneratedValue 
    private long id; 

    @ManyToOne 
    @JoinColumn 
    private Parent parent; 
} 

est pour moi il y a un moyen de créer une nouvelle méthode dans ParentRepository qui me permettrait de récupérer un compte de tous les enfants d'un parent en fonction de l'ID du parent ?

donc dans mon ParentRepository, puis-je créer une méthode qui ressemble à quelque chose comme ceci:

int findAllChildrenCount(Long parentID); 
+0

Ne pas oublier d'accepter/réponses qui ont aidé Upvote vous ... – Cepr0

Répondre

0

Essayez:

public interface ParentRepo extends JpaRepository<Parent, Long> { 

    Long countByChildren_Parent(Parent parent); 

    @Query("select count(c) from Parent p join p.children c where p = ?1") 
    Long countChildrenByParent(Parent parent); 

    Long countByChildren_ParentId(Long id); 

    @Query("select count(c) from Parent p join p.children c where p.id = ?1") 
    Long countChildrenByParentId(Long id); 
} 

public interface ChildRepo extends JpaRepository<Child, Long> { 

    Long countByParent(Parent parent); 

    @Query("select count(c) from Child c where c.parent = ?1") 
    Long countChildrenByParent(Parent parent); 

    Long countByParentId(Long id); 

    @Query("select count(c) from Child c where c.parent.id = ?1") 
    Long countChildrenByParentId(Long id); 
} 
+0

S'il vous plaît confirmer si le 'COUNT' travaille dans le @Query. J'ai essayé ça ne marchait pas. Quand j'utilise le 'SIZE' cela a fonctionné selon la réponse @xyz ci-dessous. – BlueBird

2
@Query("select size(u.children) from Parent u where u.id=:parentID") 
int findAllChildrenCount(@Param("parentID")Long parentID); 
+0

J'ai essayé 'COUNT' et n'ai pas fonctionné. Le 'SIZE' fonctionne. Merci – BlueBird