2012-01-21 5 views
6

Допустим, у нас есть один ко многим отношений между Клиентом и телефон ..с использованием режима в Fetching спящего режима

class Customer{ 

@OneToMany(cascade = {CascadeType.ALL},mappedBy = "customer", fetch = FetchType.LAZY) 
@Fetch(FetchMode.SELECT) 
private List<Phone> phoneList; 

} 

В приведенном выше коде, в чем разница между выборки = FetchType.LAZY и FetchMode.SELECT.

Я прочитал, что они оба одинаковы, то есть они лениво загружают базовую коллекцию.

Может кто-нибудь объяснить мне, какой из них использовать когда?

ответ

13

Fetch типа (ленивый/нетерпеливый) относится к когда Hibernate будет получать ассоциации, будь то заранее, когда она выбирает объект (нетерпеливый), или ждет ли для кода, чтобы попросить ассоциации (ленивый).

Fetch mode (select/join) относится к как Hibernate будет получать ассоциацию, то есть использует ли она дополнительную инструкцию SELECT или использует соединение.

Некоторые комбинации из них не имеют никакого смысла, например. ленивые + присоединиться. Если вы используете ленивую выборку, то режим выборки SELECT является единственным, что вы можете сделать.

Если вы используете надежную выборку, вы можете выбрать режим выборки.

+0

Спасибо за ответ. Так что в случае желаемой выборки, какой режим выборки лучше использовать..SELECT или JOIN? – Anand

+0

@anand: Нет «лучшего», но если соединение работает для вас, оно обычно дает лучшую производительность. – skaffman

Смежные вопросы