2017-10-09 99 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<>(); 
    } 
}