Если вы используете JPA 2.1, вы можете попробовать Entity Graph, указав атрибуты, которые вы хотите загрузить:
@Entity
@NamedQueries({
@NamedQuery(name = "Student.findAll", query = "SELECT s FROM Student s")
})
@NamedEntityGraphs({
@NamedEntityGraph(
name = "studentGraph",
attributeNodes = {
@NamedAttributeNode(value = "id"),
@NamedAttributeNode(value = "name"),
@NamedAttributeNode(value = "school", subgraph = "schoolGraph")
},
subgraphs = {
@NamedSubgraph(
name = "schoolGraph",
attributeNodes = {
@NamedAttributeNode("name")
}
)
}
)
})
public class Student {
@Id
private Long id;
private String name;
@ManyToOne
private School school;
}
И использовать как следующее:
List<Student> students = entityManager.createNamedQuery("Student.findAll")
.setHint("javax.persistence.fetchgraph", entityManager.getEntityGraph("studentGraph"))
.getResultList();
Графики сущностей также можно создавать динамически.