hibernate ManyToOne 为什么生成 2 个查询而不是 1 个?
MyTable 是我的 Oracle DB 中的一个表,它有一个 CMP_ID 来加入 COMPANIES 表。
这是 Java 实现:
public class MyTable implements Serializable {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns( { @JoinColumn(name = "CMP_ID", referencedColumnName = "CMP_ID", nullable = false) })
@XmlTransient
Company company;
...
}
在我的 JSP 页面中,我设法显示 MyTable:
${MyTable.company.cmpName}
但是 Hibernate 生成了 2 个 SELECT: 一个用于 MyObject ,另一个用于影响公司名称。
如何使用 Hibernate 在一次查询中获取我想要的所有信息? (MyTable 中的所有字段,加上 Companies 表中的公司名称)
谢谢
MyTable is a table in my Oracle DB, it has a CMP_ID to join the COMPANIES table.
Here is the Java implementation :
public class MyTable implements Serializable {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumns( { @JoinColumn(name = "CMP_ID", referencedColumnName = "CMP_ID", nullable = false) })
@XmlTransient
Company company;
...
}
In my JSP Page, i managed to display the MyTable:
${MyTable.company.cmpName}
But Hibernate generated 2 SELECTs :
one for the MyObject , and another one to fecth the Company name.
How do i fetch all the informations i want in only one query using Hibernate ? (all fields in MyTable, plus the Company name in the Companies table)
thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
如果您不想使用自定义查询,请将获取策略设置为 EAGER
只是一个建议:如果您有多个 @JoinColumn,请优先使用 @JoinColumns。否则,仅使用@JoinColumn。请记住,HQL 查询会覆盖默认的获取策略。
If you do not want to use a custom query, set up the fetching strategy as EAGER
Just an advice: prefer to use @JoinColumns if you have more than one @JoinColumn. Otherwise, use just @JoinColumn. keep in mind HQL queries overrides default fetching strategy.
这就是休眠的工作方式。请参阅http://www.javalobby.org/articles/hibernate-query-101/< /a> 了解更多信息。
That's the way hibernate works. See http://www.javalobby.org/articles/hibernate-query-101/ for more information.