2014-10-31 3 views
7

ho un seguente modello di dominio:filtro nella primavera Data Query

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 
} 

E il mio repository:

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

Ora, come si fa Ritorna una playlist con solo video esistenti, cioè, se ci sono tre video nel database assegnato a quell'elemento della playlist e uno di quei video è impostato su Eliminato per vero, quindi ho bisogno di ottenere solo due elementi invece.

+0

Immagino che tu stia chiedendo qualcosa di simile alla funzionalità Hibernate FilterDef e Filter. Sfortunatamente non conosco il modo semplice di usare qualcosa di simile nei dati di primavera jpa. A proposito: http://stackoverflow.com/questions/11619174/hibernate-filter-children –

risposta

2

Maksim, si potrebbe utilizzare la @ query annotazione in questo modo:

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

O ancora meglio:

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

Tutto quello che dovete fare è dichiarare questo metodo sulla vostra interfaccia PlaylistRepository:

List<Playlist> findByPlaylistItemsVideoIsDeleted(boolean isDeleted); 

e chiamarlo in questo modo:

playListRepository.findByPlaylistItemsVideoIsDeleted(false); 

che restituirà tutto playlist con video che non vengono rimossi.