Java 在JPA查询中选择某些字段

Java 在JPA查询中选择某些字段,java,mysql,spring,hibernate,jpa,Java,Mysql,Spring,Hibernate,Jpa,我对所有这些连接/获取进行了以下查询: public interface InitiativeRepository extends JpaRepository<Initiative, Long> { @Query("select distinct i from Initiative i " + "left join fetch i.theme t " + "left join fetch t.themeQuestions tq

我对所有这些连接/获取进行了以下查询:

public interface InitiativeRepository extends JpaRepository<Initiative, Long> {
    @Query("select distinct i from Initiative i " +
            "left join fetch i.theme t " +
            "left join fetch t.themeQuestions tq " +
            "left join fetch tq.initiativeProfileQuestion ipq " +
            "left join fetch ipq.answers " +
            "left join fetch ipq.answerLogs al " +
            "where al.revision = i.revision " +
            "order by ipq.question asc")
    public List<Initiative> getThemeAndQuestionsAndAnswerLogs();
}
public interface InitiativeRepository扩展了JpaRepository{
@查询(“从倡议i中选择不同的i”+
“左连接获取i.t”+
“左连接获取t.themeQuestions tq”+
“左连接获取tq.initiativeProfileQuestion ipq”+
“左连接获取ipq.answers”+
“左连接获取ipq.answerLogs al”+
“其中al.revision=i.revision”+
“ipq订购问题asc”)
公共列表获取MeandQuestions和AnswerLogs();
}
因为我做了这么多的连接,显然hibernate正在获取每个对象的所有属性。例如,left join fetch i.theme t获取主题的所有属性。如果我只想获取主题对象中的主题名称和主题请求属性(我不想要任何不必要的属性),该怎么办


我不确定这是否仅通过带注释的查询就可以实现。任何想法都将不胜感激。

首先,如果您只需要where子句条件的
al
(应答日志),那么您只需要
i.theme
t.themeQuestions
上的
fetch
。不要
加入fetch
任何您不需要返回的内容。我知道返回刚刚选定的列/字段的唯一方法是选择字段作为列列表,然后根据返回的结果集构建对象。好的,我想获取列出的所有对象。只是-在主题对象本身中,有许多属性对于这个查询来说是不必要的,它们只会占用不必要的内存-特别是当我期望返回大约40000行时。如果你得到所有其他对象,那么我认为你不会得到太多好处。你可以拆分你的
主题
类,这样你就有了一个名为
主题细节
的一对一的相关实体,比如说,就是不获取那个对象。这样,
Theme
就可以有
ThemeQuestions
的名称和列表。首先,如果您只需要where子句条件的
al
(应答日志),那么您只需要
i.Theme
t.ThemeQuestions
上的
fetch
。不要
加入fetch
任何您不需要返回的内容。我知道返回刚刚选定的列/字段的唯一方法是选择字段作为列列表,然后根据返回的结果集构建对象。好的,我想获取列出的所有对象。只是-在主题对象本身中,有许多属性对于这个查询来说是不必要的,它们只会占用不必要的内存-特别是当我期望返回大约40000行时。如果你得到所有其他对象,那么我认为你不会得到太多好处。你可以拆分你的
主题
类,这样你就有了一个名为
主题细节
的一对一的相关实体,比如说,就是不获取那个对象。这样一来,
Theme
就可以有
ThemeQuestions
的名称和列表。