这是一个命名查询,用于获取具有特定用户元数据的特定曲目。
"SELECT t FROM Track t LEFT JOIN FETCH t.metadata tm WHERE t.id= :id AND tm.userID = :userID"在Track entity中,我有一个带有@OneToMany关系的元数据列表,带有join table inbetween 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<>();上面查询的结果是跟踪所有它的所有元数据,但我想跟踪特定的元数据。比如用户特定的。谢谢!
发布于 2016-02-09 03:12:24
当您读取Track并初始化其metadata集合时,Hibernate将填充整个集合。这就是Hibernate的工作原理。
如果您只想加载特定的metadata元素,那么您可以使关联成为双向的,并且只加载所需的元数据:
select tm from TrackMetaData tm where tm.track.id = :id and tm.userID = :userIDhttps://stackoverflow.com/questions/35276381
复制相似问题