Я начал использовать EntityGraphs и задавался вопросом, как использовать их для случаев, когда отношения с Entity не являются прямыми, а сделаны через 'JoinEntity' (не знаю правильного английского слова для этого.).
В нормальном случае люди используют что-то вроде этого:
(идентификатор и стороны-владельцы исключаются из-за простоты кода)
@Entity
public class Post {
@OneToMany(mappedBy = "post")
private List<Comment> comments = new ArrayList<>();
}
@Entity
public class Comment {
@OneToMany(mappedBy = "comment")
private List<OtherEntity> others= new ArrayList<>();
}
@NamedEntityGraph(
name = "post-entity-graph",
attributeNodes = {
@NamedAttributeNode(value = "comments", subgraph = "comments-subgraph"),
},
subgraphs = {
@NamedSubgraph(
name = "comments-subgraph",
attributeNodes = {
@NamedAttributeNode("others")
}
)
}
)
Но как обрабатывать что-то вроде этого: (Post Entityто же самое)
@Entity
public class Comment {
@OneToMany(mappedBy = "comment")
private List<OtherEntityJoiner> others= new ArrayList<>();
}
@Entity
public class OtherEntityJoiner{
@ManyToOne
@JoinColumn(name = "other_entity_id", nullable = false)
@NotNull
private OtherEntity other;
@ManyToOne
@JoinColumn(name = "comment_id", nullable = false)
@NotNull
private Comment comment;
//fields for additional informations about the relation
}
С определенным выше графом сущностей будут выбираться и другие. Но как нам изменить наш график, если мы хотим получить другую коллекцию в OtherEntity. Как нам «пройти» этот OtherEntityJoiner с подграфом?