hibernate ManyToOne 为什么生成 2 个查询而不是 1 个?

发布于 2024-09-26 05:51:43 字数 574 浏览 4 评论 0原文

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

謌踐踏愛綪 2024-10-03 05:51:43

如果您不想使用自定义查询,请将获取策略设置为 EAGER

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="CMP_ID", referencedColumnName="CMP_ID", nullable=false)
private Company company;

只是一个建议:如果您有多个 @JoinColumn,请优先使用 @JoinColumns。否则,仅使用@JoinColumn。请记住,HQL 查询会覆盖默认的获取策略。

If you do not want to use a custom query, set up the fetching strategy as EAGER

@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name="CMP_ID", referencedColumnName="CMP_ID", nullable=false)
private Company company;

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.

红墙和绿瓦 2024-10-03 05:51:43

That's the way hibernate works. See http://www.javalobby.org/articles/hibernate-query-101/ for more information.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文