我有以下课程:
@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将进行许多快速调用。然而,我不知道是什么因素帮助我决定哪种方法是最佳的。
(当然,我会运行测试,但这只会回答哪种方法是最佳的,它不会解释原因)
我们将非常感谢你的帮助。
发布于 2016-02-07 00:48:44
下面是一个很好的讨论,并列举了一些具体的例子:
http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/
如果您使用“原始SQL”(无论是SQL语句还是存储过程)进行编码,答案通常是不需要考虑的:一个复杂的"select/join“查询几乎总是比多个查询更好。
就Hibernate而言,答案是“联接”通常比选择更好。
建议:修改spring.xml以启用"show_sql",并比较结果。
PS:
另外两个很好的链接:
https://stackoverflow.com/questions/35248385
复制相似问题