在Spring Data中根据子对象查找对象

时间:2017-10-09 20:16:39

标签: java spring hibernate jpa

所以我有以下实体/表格用于多对多关系: Satz 跟踪和映射表 Trackliste

@Entity
class Track{
   // name, id
   @ManyToMany(targetEntity = Satz.class, fetch = FetchType.LAZY)
   @JoinTable(
            name="trackliste", joinColumns=@JoinColumn(name="TrackID"), 
   inverseJoinColumns=@JoinColumn(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);?

}

映射到目前为止,当我调用我的Webservice时,它返回一个json对象,并且在调试的帮助下,我可以看到SatzRepository Set包含Track的对象。

现在我的问题是:如何根据给定的曲目名称返回Satz这可能吗?假设我有一个这样的网址:localhost:8080/rest/satz/trackname?name=%trackname%

  

如果您需要更多信息,请告诉我。

1 个答案:

答案 0 :(得分: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<>();
    }
}