我有三个实体主题,主题和类别。如何在检索包含主题和主题的所有类别时,为每个实体预取id和name列?我不需要其他字段,因为它会影响性能。
@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 :(得分: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();