I have 3 entities. Branch,Subject,Topic. Branch has list of subjects and Subject has list of topics. Also subjectList and topicList both are lazy. I want to fetch all branch including its subjects and topics in single query.
1.
@Entity public class Branch implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; @OneToMany(mappedBy = "branch") private List<Subject> subjectList; //Getters and Setters } 2.
@Entity public class Subject implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; @ManyToOne() private Branch branch; @OneToMany(mappedBy = "subject") private List<Topic> topicList; //Getters and Setters } 3.
@Entity public class Topic implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; private String name; @ManyToOne() private Subject subject; //Getters and Setters } I have tried below method but it not working.
@NamedEntityGraph(name="branch_subject", attributeNodes = { @NamedAttributeNode(value="name"), @NamedAttributeNode(value="subjectList", subgraph = "subjectListGraph") }, subgraphs = { @NamedSubgraph(name="subjectListGraph", attributeNodes = { @NamedAttributeNode(value="name"), @NamedAttributeNode(value = "topicList", subgraph = "topicListGraph") } ), @NamedSubgraph(name="topicListGraph", attributeNodes = { @NamedAttributeNode("name") } ) } ) Also following code is used to fetch data from database, I am using JPQL as follows
EntityGraph branchEntityGraph = entityManager .getEntityGraph("branch_subject"); Branch branch = entityManager .createQuery("SELECT b from Branch b WHERE b.id=:ID", Branch.class) .setHint("javax.persistence.loadgraph", branchEntityGraph) .setParameter("ID", branch1.getId()).getResultList().get(0); This gives below exception
org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags