J'ai un modèle de domaine suivant:
Playlist
-> List<PlaylistItem>
-> Video
@Entity
class Playlist{
// id, name, etc
List<PlaylistItem> playlistItems;
// getters and setters
}
@Entity
class PlaylistItem{
// id, name, etc.
Video video;
// getters and setters
}
@Entity
class Video{
// id, name, etc.
boolean isDeleted;
// getters and setters
}
Et mon référentiel:
public interface PlaylistRepository extends JpaRepository<Playlist, Long> {
List<Playlist> findAll();
}
Maintenant, comment puis-je renvoyer une liste de lecture contenant uniquement des vidéos existantes, c.-à-d. Si la base de données contient trois vidéos affectées à cet élément de liste de lecture et que l'une de ces vidéos est définie sur true, alors je n'ai besoin que de deux éléments.
Tout ce que vous avez à faire est de déclarer cette méthode sur votre interface PlaylistRepository
:
List<Playlist> findByPlaylistItemsVideoIsDeleted(boolean isDeleted);
Et appelez ça comme ça:
playListRepository.findByPlaylistItemsVideoIsDeleted(false);
Cela renverra toutes les listes de lecture avec des vidéos non supprimées.
Maksim, vous pouvez utiliser l'annotation @query comme ceci:
public interface PlaylistRepository extends JpaRepository<Playlist, Long> {
@Query("select playlist from Playlist playlist
fetch join playlist.playlistItems itens
fetch join itens.video as video
where video.isDeleted = false")
List<Playlist> findAll();
}
Ou encore mieux:
public interface PlaylistRepository extends JpaRepository<Playlist, Long> {
@Query("select playlist from Playlist playlist
fetch join playlist.playlistItems itens
fetch join itens.video as video
where video.isDeleted = :hasVideo ")
List<Playlist> findPlayList(@Param("hasVideo") boolean hasVideo);
}
Vous pouvez consulter les spécifications de données de printemps. Vous les utilisez en appelant repository.findAll (s);
Les spécifications vous permettent d'ajouter des conditions arbitraires à votre requête, y compris le filtre que vous souhaitez ajouter. Une autre bonne chose à propos des spécifications est qu’elles peuvent être sécurisées contre le type. Vois ici:
http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications