2015-11-02 37 views
0

我正在開發一個基於JPA的項目,我有兩個實體,比如學生和學校。每個學生都有一所學校。JPA懶性屬性獲取客戶屬性

學生學校屬性獲取類型是懶惰的,但我需要能夠熱切地獲取學校名稱屬性。

有沒有辦法做到這一點?

感謝對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(); 

實體圖也可以動態創建。