【问题标题】:Hibernate FetchMode SELECT vs JOIN休眠 FetchMode SELECT 与 JOIN
【发布时间】:2016-02-07 00:39:30
【问题描述】:

我有以下课程:

   @Entity
public class TestContentElementResponse
{

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected Long id;



    @OneToMany(mappedBy = "testContentElementResponse", cascade = CascadeType.ALL, orphanRemoval = false)
    private Set<ResponseAttribute> associatedResponseAttributes = new HashSet<ResponseAttribute>();


    @ManyToOne
    @JoinColumn(name = "userfulltestId", referencedColumnName = "id", nullable = false)
    private UserFullTest userFullTest;

    @ManyToOne
    @JoinColumn(name = "testContentElementId", referencedColumnName = "id", nullable = false)
    private TestContentElement testContentElement;



    @OneToOne(cascade = CascadeType.ALL)
    private TestContentElementScore testContentElementScore;

    @ManyToOne
    @JoinColumn(name = "userId", referencedColumnName = "id", nullable = false)
    private User user;

TestContentElementResponse.class 代表测试中的一个用户响应。 一项测试可以有 30 个问题,因此每位用户 30 个回答。

现在我想为一个用户调用所有 TestContentElementResponse(通用 ID 为 UserFullTestId),并为每个 TestContentElementResponse 调用所有 ResponseAttributes。

我可以使用条件查询来做到这一点,但我不确定是使用 SELECT 还是 JOIN FetchMode。我确实知道 JOIN 将对数据库进行一次大调用,而 SELECT 将进行许多快速调用。但是,我不知道哪些因素可以帮助我决定哪种方法是最佳的。

(当然,我会进行测试,但这只会回答哪种方法是最佳的,不会解释原因)

非常感谢您的帮助

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    这里有一个很好的讨论,有一些具体的例子:

    http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/

    如果您使用“原始 SQL”(SQL 语句或存储过程)进行编码,答案通常很简单:单个复杂的“选择/加入”查询几乎总是优于多个查询。

    就 Hibernate 而言,答案是“加入”通常比选择好。

    建议:修改您的 spring.xml 以启用“show_sql”,并比较结果。

    PS:

    另外两个不错的链接:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-06
      • 2015-12-28
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-14
      • 1970-01-01
      相关资源
      最近更新 更多