2017-07-31 196 views
0

我有三个实体主题,主题和类别。我如何预取每个实体的ID和名称列,同时检索包含主题和主题的所有类别?我不需要其他领域,因为它会影响性能。嵌套集合的投影

@Entity 
class Topic{ 
    private Long id; 
    private String name; 
    ... 
    //other fields 
} 

@Entity 
class Subject{ 
    private Long id; 
    private String name; 
    ... 
//other fields 

    @OneToMany(fetch=FetchType.LAZY) 
    private List<Topic> topics; 
} 

@Entity 
class Category{ 
    private Long id; 
    private String name; 
    ... 
    //other fields 
    @OneToMany(fetch=FetchType.LAZY) 
    private List<Subject> subjects; 
} 

回答

0

我会建议在投影本身之上创建一个结果类,因为它简化了结果集处理。 ResultClass需要有一个带有相关查询结果字段的构造函数,并且您必须在查询本身中使用完全限定名称。

select new org.mypkg.ResultClass(c.id, c.name, s.id, s.name, t.id, t.name) 
from Category c 
    inner join c.subjects s 
    inner join s.topics 

那你干脆:

List<ResultClass> results = em.createQuery(query).list(); 
+0

谢谢,但有一个问题:我得组主题和主题之后手动 – romanvintonyak