Java 基于Spring数据中的子对象查找对象
因此,对于多对多关系,我有以下实体/表格:Satz、Track和映射表TracklisteJava 基于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
@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();
}
}