hibernate manytone为什么生成两个查询而不是一个?

hibernate manytone为什么生成两个查询而不是一个?,hibernate,orm,many-to-one,Hibernate,Orm,Many To One,MyTable是我的Oracle DB中的一个表,它有一个CMP_ID来加入公司表 以下是Java实现: public class MyTable implements Serializable { ... @ManyToOne(fetch = FetchType.LAZY) @JoinColumns( { @JoinColumn(name = "CMP_ID", referencedColumnName = "CMP_ID", nullable = false) }) @XmlTransien

MyTable是我的Oracle DB中的一个表,它有一个CMP_ID来加入公司表

以下是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个选项: 一个用于MyObject,另一个用于显示公司名称

如何使用Hibernate在一个查询中获取所需的所有信息?(MyTable中的所有字段,加上Companys表中的公司名称)


谢谢

这就是hibernate的工作方式。有关更多信息,请参阅

这就是hibernate的工作方式。有关更多信息,请参阅

如果不想使用自定义查询,将抓取策略设置为“急切”

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

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

如果您不想使用自定义查询,请将抓取策略设置为“急切”

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

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

因此,如果我读得好,改变这种行为的唯一方法是使用自定义查询?没有其他选项/注释?您也可以在查询中使用左连接,但我认为延迟获取不起作用。因此,如果我读得好,改变此行为的唯一方法是使用自定义查询?没有其他选项/注释?您也可以在查询中使用左连接,但我认为延迟获取不起作用。