2015-11-02 3 views
0

Я работаю над проектом на основе JPA, и у меня есть два объекта, например, Student and School. У каждого учащегося есть одна школа.JPA lazy свойство fetch custome attribute

Тип выборки атрибута Student School ленив, но мне нужно иметь возможность получить только атрибут имени школы.

есть ли способ сделать это?

Спасибо за respoding

ответ

2

Если вы используете 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(); 

Графики сущностей также можно создавать динамически.

Смежные вопросы