hibernate ManyToOne, почему генерируются 2 запроса вместо одного? - PullRequest
1 голос
/ 03 октября 2010

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, плюс название компании в таблице Companies)

спасибо

Ответы [ 2 ]

1 голос
/ 03 октября 2010

Если вы не хотите использовать пользовательский запрос, установите стратегию извлечения как EAGER

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

Просто совет: предпочитайте использовать @JoinColumns, если у вас более одного @JoinColumn. В противном случае используйте просто @JoinColumn. имейте в виду, что запросы HQL переопределяют стратегию выборки по умолчанию.

0 голосов
/ 03 октября 2010

Так работает спящий режим.См. http://www.javalobby.org/articles/hibernate-query-101/ для получения дополнительной информации.

...