Java 基于Spring数据中的子对象查找对象

Java 基于Spring数据中的子对象查找对象,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,因此,对于多对多关系,我有以下实体/表格:Satz、Track和映射表Trackliste @Entity class Track{ // name, id @ManyToMany(targetEntity = Satz.class, fetch = FetchType.LAZY) @JoinTable( name="trackliste", joinColumns=@JoinColumn(name="TrackID"), inverseJoin

因此,对于多对多关系,我有以下实体/表格:SatzTrack和映射表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
}
@实体
班级轨道{
//姓名、身份证
@ManyToMany(targetEntity=Satz.class,fetch=FetchType.LAZY)
@可接合(
name=“trackliste”,joinColumns=@JoinColumn(name=“TrackID”),
inverseJoinColumns=@JoinColumn(name=“SatzID”))
私人设置的saetze;
//接球手和接球手
}
@实体
类Trackliste{
//id,trackid,satzid。
//接球手和接球手
}
@实体
公共类Satz实现了可序列化{
//身份证、提特尔、沃基德等
@ManyToMany(mappedBy=“saetze”,fetch=FetchType.LAZY)
专用轨道;
//接球手和接球手
}
我的存储库如下所示:

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);?

}
公共接口SatzRepository扩展了CrudRepository{
列表findById(int-id);
列表findByWerkId(int-id);
//也许有什么疑问?
//列出findByTracks(字符串名称);?
}
到目前为止,映射工作正常,当我调用我的Webservice时,它返回一个json对象,在调试的帮助下,我可以看到SatzRepository集包含Track对象

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

如果你需要更多的信息,请告诉我


您可以在TrackRepository中添加一个方法来按名称查找track,然后可以从track对象中获取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<>();
    }
}
公共接口TrackRepository扩展了Crudepository{
跟踪findByName(字符串名称);
}
@交易的
公共TrackServiceImpl实现TrackService{
@自动连线
轨迹库轨迹库;
列表getSatzByTrackName(字符串名称){
Track Track=trackRepository.getByName(名称);
返回磁道!=null?磁道.getSaetze():新ArrayList();
}
}