Wie kann ich alle Viele-zu-Viele-Beziehungen mit einer minimalen Anzahl von Abfragen abrufen? Ich meine ohne n+1 queries
. 3 - es ist normalWie werden alle Viele-zu-Viele-Beziehungen in einer minimalen Anzahl von Abfragen abgerufen?
ich eine Einheit haben:
@Entity
@Table(name = "tags")
public class Tag {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
}
@Entity
@Table(name = "stations")
public class Station {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
}
@Entity
@Table(name = "songs")
public class Song {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id")
private Long id;
@Column(name = "title")
private String title;
@ManyToMany
@JoinTable(
name = "songs_stations",
joinColumns = {
@JoinColumn(
name = "song_id",
referencedColumnName = "id"
)
},
inverseJoinColumns = {
@JoinColumn(
name = "station_id",
referencedColumnName = "id"
)
}
)
private List<Station> stations;
@ManyToMany
@JoinTable(
name = "songs_tags",
joinColumns = {
@JoinColumn(
name = "song_id",
referencedColumnName = "id"
)
},
inverseJoinColumns = {
@JoinColumn(
name = "tag_id",
referencedColumnName = "id"
)
}
)
private List<Tag> tags;
}
Und ein Repository:
public interface SongRepository extends CrudRepository<Song, Long> {
@Query("SELECT s FROM Song s LEFT JOIN FETCH s.tags LEFT JOIN FETCH s.stations")
public List<Song> completeFindAllSongs();
}
- so, ich nicht eifrig Laden in
completeFindAllSongs()
Ursache fürcannot simultaneously fetch multiple bags
verwenden können
- Kann nicht verwenden
@NamedEntityGraph
- Und ich kann die Daten nicht manuell geladen werden, denn ich habe keinen Zugriff auf
songs_tags
Tisch - Bitte geben Sie nicht
@LazyCollection
Was soll ich tun, zu benutzen?
ja es funktioniert, aber was ist, wenn ich brauche Liste – sata