2014-10-31 14 views
7

Tôi có một mô hình miền sau:Lọc đối tượng trẻ em trong mùa xuân dữ liệu 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 
} 

Và kho của tôi:

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

Bây giờ, làm thế nào Tôi trả lại một danh sách phát chỉ có các video hiện có, nghĩa là nếu có ba video trong cơ sở dữ liệu được gán cho mục danh sách phát đó và một trong các video đó có isDeleted set đúng, sau đó tôi cần chỉ nhận được hai mục.

+0

Tôi đoán bạn đang hỏi về một cái gì đó tương tự như chức năng lọc và lọc bộ lọc Hibernate. Thật không may tôi không biết cách dễ dàng để sử dụng bất cứ điều gì tương tự trong jpa dữ liệu mùa xuân. FYI: http://stackoverflow.com/questions/11619174/hibernate-filter-children –

Trả lời

2

Maksim, bạn có thể sử dụng @query chú thích như thế này:

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

Hoặc thậm chí cách tốt hơn:

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

Bạn có thể nhìn vào dữ liệu Xuân Thông số kỹ thuật. Bạn sử dụng chúng bằng cách gọi repository.findAll (s);

Thông số cho phép bạn thêm các điều kiện tùy ý vào truy vấn của mình, bao gồm bộ lọc bạn muốn thêm. Một điều thú vị khác về Thông số kỹ thuật là chúng có thể an toàn kiểu. Xem ở đây:

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

6

Tất cả bạn phải làm là khai báo phương pháp này trên giao diện PlaylistRepository của bạn:

List<Playlist> findByPlaylistItemsVideoIsDeleted(boolean isDeleted); 

Và gọi nó là như thế này:

playListRepository.findByPlaylistItemsVideoIsDeleted(false); 

Điều đó sẽ trả lại tất cả danh sách phát có video không bị xóa.

Các vấn đề liên quan