2014-10-31 18 views
7

I have a aşağıdaki alanı modeli:Filtre alt nesne

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 
} 

Ve depo:

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

Şimdi, nasıl yapmak Yalnızca mevcut videolar içeren bir oynatma listesi döndürüyorum. Örneğin, söz konusu oynatma listesi öğesine atanan veritabanında üç video varsa ve bu videolardan biri de seçildi Doğru, o zaman sadece iki öğe almam gerekiyor.

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

Veya daha iyi bir yol:

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); 
} 
+0

Hazırda beklemede olan FilterDef ve Filter işlevine benzer bir şey hakkında soru soruyorsunuz. Ne yazık ki bahar veri jpa benzer bir şey kullanmak için kolay yolu bilmiyorum. FYI: http://stackoverflow.com/questions/11619174/hibernate-filter-children –

cevap

2

Maksim, sen @query böyle ek açıklama kullanabilirsiniz. Repository.findAll (ler) 'i arayarak bunları kullanırsınız;

Özellikler, eklemek istediğiniz filtre dahil olmak üzere sorgunuza isteğe bağlı koşulları eklemenize izin verir. Teknik Özellikler ile ilgili bir başka güzel şey, bu tip güvenli olabilir. Buraya bakın:

List<Playlist> findByPlaylistItemsVideoIsDeleted(boolean isDeleted); 

Ve böyle diyoruz:

playListRepository.findByPlaylistItemsVideoIsDeleted(false); 

tüm dönecektir O

http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#specifications

0

Sen Bahar Veri Özellikleri içine bakabilirsiniz

6

yapmanız gereken tek şey PlaylistRepository arabirimde bu yöntem bildirmek olduğunu Kaldırılmayan videolarla oynatma listesi.

İlgili konular