2010-10-03 55 views
1

MyTable是我的Oracle DB中的一个表,它有一个CMP_ID来加入公司表。hibernate ManyToOne为什么会生成2个查询而不是1个查询?

这里是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的所有领域,加上在公司表中的公司名称)

谢谢

回答

1

如果你不想使用自定义查询,建立的数据抓取策略急于

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

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

0

就是这样冬眠的作品。有关更多信息,请参见http://www.javalobby.org/articles/hibernate-query-101/

+0

所以,如果我读得不错,改变这种行为的唯一方法是使用自定义查询?没有其他选项/注释? – guigui42 2010-10-03 13:45:38

+0

您也可以在查询中使用左连接,但我不认为懒惰获取会起作用。 – BillThor 2010-10-03 23:27:06

相关问题