2014-10-31 20 views
7

Mam następujący model domeny:Filtr obiekt dziecko w Spring Query Danych

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 
} 

A mój repozytorium:

public interface PlaylistRepository extends JpaRepository<Playlist, Long> { 
    List<Playlist> findAll(); 
} 

Teraz, jak zrobić Zwracam playlistę tylko z istniejącymi filmami, tzn. Jeśli w bazie danych są przypisane trzy filmy do tego elementu listy odtwarzania, a jeden z tych filmów ma ustawiony wolny zestaw na prawdę, potrzebuję zamiast tego tylko dwóch elementów.

+0

Chyba pytasz o coś podobnego do Hibernate FilterDef i funkcji filtra. Niestety nie znam łatwego sposobu użycia czegoś podobnego w wiosennych danych jpa. FYI: http://stackoverflow.com/questions/11619174/hibernate-filter-children –

Odpowiedz

2

Maksim, można użyć @query adnotacji takiego:

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(); 
} 

lub nawet lepszy sposób:

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); 
} 
6

Wszystko co musisz zrobić, to zadeklarować tę metodę na interfejsie PlaylistRepository:

List<Playlist> findByPlaylistItemsVideoIsDeleted(boolean isDeleted); 

i nazwać tak:

playListRepository.findByPlaylistItemsVideoIsDeleted(false); 

Że wróci wszystko playlista z filmami, które nie są usunięte.