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

时间:2010-10-03 13:16:47

标签: hibernate orm many-to-one

MyTable是我的Oracle数据库中的一个表,它有一个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中的所有字段,以及公司表中的公司名称)

谢谢

2 个答案:

答案 0 :(得分:1)

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

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

只是一个建议:如果你有多个@JoinColumn,更喜欢使用@JoinColumns。否则,只使用@JoinColumn。请记住,HQL查询会覆盖默认的提取策略。

答案 1 :(得分:0)

这就是hibernate的工作方式。有关详细信息,请参阅http://www.javalobby.org/articles/hibernate-query-101/