Hibernate在注释OneToOne关系并使用联接获取时发出1 + n个查询

时间:2019-05-10 10:59:38

标签: java hibernate

说有两个类,Task和JobContentSummary, 我们有这两个的两个版本: 版本1:

public class Task {
    @OneToOne(mappedBy="task")
    private JobContentSummary jobContentSummary;
}
public class JobContentSummary {
    @OneToOne()
    @JoinColumn(name = "task_id")
    private Task task;
}

版本2:

public class Task {
    @OneToOne()
    @JoinColumn(name = "jobcontent_summary_id")
    private JobContentSummary jobContentSummary;
}
public class JobContentSummary {
    @OneToOne(mappedBy="jobContentSummary")
    private Task task;
}

然后运行以下代码:

String hql = "from Task t left join fetch left join fetch t.jobContentSummary";
Query query = getSession().createQuery(hql);
query.list();

我发现使用版本2时,Hibernate为每个Task实例对JobContentSummary发出一个额外的查询,而使用版本1时,该问题不存在。

我正在使用Hibernate 4.3.5.Final。上层现象是错误(可能是在以后的版本中解决了吗)还是设计?

谢谢。

0 个答案:

没有答案