2017-10-09 98 views
-1

,所以我有以下實體來說/對許多表許多關係:起價軌道和映射表Trackliste查找基於子對象上的對象在Spring數據

@Entity 
class Track{ 
    // name, id 
    @ManyToMany(targetEntity = Satz.class, fetch = FetchType.LAZY) 
    @JoinTable(
      name="trackliste", [email protected](name="TrackID"), 
    [email protected](name="SatzID")) 
    private Set<Satz> saetze; 
    // getters and setters 
} 


@Entity 
class Trackliste { 
    // id, trackid, satzid. 
    // getters and setters 
} 

@Entity 
public class Satz implements Serializable { 
// id, titel, werkId, etc 
@ManyToMany(mappedBy="saetze", fetch = FetchType.LAZY) 
private Set<Track> tracks; 
// getters and setters 
} 

和我的倉庫看起來是這樣的:

public interface SatzRepository extends CrudRepository<Satz, Integer> { 

    List<Satz> findById(int id); 
    List<Satz> findByWerkId(int id); 

    //Some query maybe? 
    //List<Satz> findByTracks(String name);? 

} 

的測繪工作至今,當我打電話給我的web服務,它返回一個JSON對象,並與調試我的幫助可以看到,SatzRepository套裝包括軌道的物體。

現在我的問題是:我如何返回基於給定的曲目名稱的起價是這可能嗎?可以說我有這樣的網址:localhost:8080/rest/satz/trackname?name=%trackname%

如果您需要更多的信息,請告訴我。

回答

1

您可以在TrackRepository中添加一個方法來按名稱查找軌道,然後您可以從軌道對象中獲取satz列表。

public interface TrackRepository extends CrudRepository<Track, Integer> { 

    Track findByName(String name); 

} 

@Transactional 
public TrackServiceImpl implement TrackService{ 
    @AutoWired 
    TrackRepository trackRepository; 

    List<Satz> getSatzByTrackName(String name){ 
     Track track = trackRepository.getByName(name); 

     return track != null ? track.getSaetze() : new ArrayList<>(); 
    } 
}