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
的名称和列表。