所以我有以下实体/表格用于多对多关系: 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%
如果您需要更多信息,请告诉我。
答案 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<>();
}
}