这是命名查询,用于获取具有特定用户元数据的特定轨道。
"SELECT t FROM Track t LEFT JOIN FETCH t.metadata tm WHERE t.id= :id AND tm.userID = :userID"
在Track实体中,我有@OneToMany关系的元数据列表,其中name = tracks_metadata_join之间的连接表。
//TrackMetadata
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, targetEntity=TrackMetadata.class, orphanRemoval = true)
@JoinTable(name = "tracks_metadata_join", joinColumns = { @JoinColumn(name = "track_id",
referencedColumnName = "id", table = "tracks") }, inverseJoinColumns = @JoinColumn(
name = "track_metadata_id", referencedColumnName = "id", table = "tracks_metadata"))
@JsonProperty
private List<TrackMetadata> metadata = new ArrayList<>();
以上查询的结果是跟踪所有元数据,但我希望使用特定元数据跟踪。像用户特定的。 谢谢!
答案 0 :(得分:0)
当您阅读Track
并初始化其metadata
集合时,Hibernate将填充整个集合。这就是Hibernate的工作原理。
如果您只想加载特定的metadata
元素,那么您可以使关联双向并仅加载所需的元数据:
select tm from TrackMetaData tm where tm.track.id = :id and tm.userID = :userID