gpt4 book ai didi

hibernate - 一对多 : get size of collection

转载 作者:行者123 更新时间:2023-12-03 18:35:56 24 4
gpt4 key购买 nike

我正在使用 Spring Data JPA(内部 hibernate )。我有两个实体测验和问题。它们之间的一对多关系。测验有问题列表。如何获取有关测验和问题列表大小的信息?如果我这样写:

Quiz quiz = quizRepository.findOne(1);
int questionCount = quiz.getQuestions().size();

Hibernate 生成两个查询:
  • 选择测验信息
  • 选择所有问题

  • 但我只需要测验信息和问题的大小。

    如果没有第二次选择,我该怎么做?

    最佳答案

    如果您愿意使用特定于 Hibernate 的注释,则可以执行以下操作:

    class Quiz {
    @LazyCollection(LazyCollectionOption.EXTRA)
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "quiz", orphanRemoval = true)
    private Set<Question> questions;
    }

    注意使用 @LazyCollection(LazyCollectionOption.EXTRA) .

    现在,如果你这样做 quizRepsitory.findOne(...).getQuestions().size() , Hibernate 将触发查询 SELECT COUNT(...) FROM question WHERE quiz_id=? .但是,如果您这样做 for(Question question : quizRepsitory.findOne(...).getQuestions()) { ... } , Hibernate 将触发不同的查询: SELECT * FROM question WHERE quiz_id=? .另外,如果 quiz.questions已经加载, COUNT查询不会再次触发。省去你的 map QuizQuestion两次,一次用于实际收集,一次用于计数。

    关于hibernate - 一对多 : get size of collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30995226/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com