我有以下课程:
@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为ONE用户(公共id为UserFullTestId)和所有ResponseAttributes调用ALL TestContentElementResponse。
我可以使用条件查询来执行此操作,但我不确定是使用SELECT还是JOIN FetchMode。我知道JOIN会对数据库进行一次大调用,而SELECT会进行很多快速调用。但是,我不知道哪些因素可以帮助我确定哪种方法是最佳的。
(当然,我会运行测试,但这只能回答哪种方法最合适,不能解释原因)
非常感谢帮助
答案 0 :(得分:3)
这是一个很好的讨论,有一些具体的例子:
http://www.mkyong.com/hibernate/hibernate-fetching-strategies-examples/
如果您正在编写&#34;原始SQL&#34; (无论是SQL语句还是存储过程),答案通常都是明智的:单一的复杂&#34;选择/加入&#34;查询几乎总是首选多个查询。
就Hibernate而言,答案是&#34;加入&#34; 通常比选择更好。
建议:修改spring.xml以启用&#34; show_sql&#34;,并比较结果。
PS:
另外两个好的链接: