2013-12-06 1 views
0

Я прочитал это в EJB/JPA книги:.иногда упорство по-прежнему позволяет загружать данные как с нетерпением?

«Даже если вы отметите свойство ленивым для @Basic типа, поставщика инерционность до сих пор разрешено загружать свойство жадностью Это связано с тем, что эта особенность требует аппаратуры на уровне класса. Следует также отметить, что ленивая загрузка не является ни действительно полезной, ни значительной оптимизацией производительности. Лучше всего охотно загружать основные свойства ».

ВОПРОС 1)
Если установить свойство как ленивые, почему электронная поставщик инерционности еще разрешена загружать свойство жадности? когда это происходит? и почему? это только для примитивов?

ВОПРОС 2)

«THE @Basic аннотаций являются самой простой формой отображения для постоянного свойства. Этот тип отображения по умолчанию для свойств, которые являются примитивами, примитивных типов оболочек»

Если Я использую не использовать примитив или оболочку (например, я использую свой объект класса), будет ли он постоянным провайдером по-прежнему разрешать загружать свойство с нетерпением?

ВОПРОС 3) «Вам не нужно сообщить ваш менеджер перманентного явно, что вы картирование основного свойства, потому что, как правило, выяснить, как отобразить его в JDBC, используя тип свойства.»

Как я понимаю, это происходит, когда я использую примитивы или обертки, не так ли? И как это выяснить, как карта? Есть ли очевидное правило?

ответ

1

ВОПРОС 1) Если я установил свойство как LAZY, то почему провайдер постоянства все еще разрешен для загрузки собственности с нетерпением? когда это происходит? и Почему? это только для примитивов?

Из-за проблем с производительностью: поставщик JPA имеет право (в соответствии со спецификацией JPA) решить, что лучше получить поле с нетерпением. Это справедливо и для полей обертки & Строки. При этом не указывается, когда это происходит, а это значит, что это может произойти, когда провайдер JPA сочтет это необходимым.

ВОПРОС 2) «@Basic аннотаций является самой простой формой отображения для упорная свойства. Этот тип отображения по умолчанию для свойств , которые являются примитивы, примитивные типы обертки» Если я использую не использовать примитив или оболочка (например, я использую свой объект класса ), будет ли он постоянным провайдером по-прежнему разрешать загрузку ?

На самом деле да, а также для отношений у вас есть одно и то же правило, хотя почти всегда поставщик JPA рассмотрит ваш намек. Конечно: если у вас есть поле типа YouClass, вам не разрешается комментировать его с помощью @Basic и использовать аннотации @ ManyToOne. Вы будете читать дальше о них.

ВОПРОС 3) «Вы не должны сказать своему менеджеру настойчивости явно, что вы картирование основного свойства, потому что, как правило, выяснить, как отобразить его в JDBC, используя тип свойства.»

Как я понимаю, это происходит, когда я использую примитивы или обертки, не Я? И как это выяснить, как карта? Есть ли очевидное правило?

Это все типы, перечисленные в документации @Basic annotation, а не только те, которые вы указали. Правило довольно просто: типы строк отображаются как столбцы VARCHAR/CHAR, числовые поля, такие как NUMBER (или DECIMAL) и так далее.

+0

Как я понимаю, я никогда не могу написать значение свойства - лениво или нетерпеливо. Каждый раз, JPA будет решать, какой путь лучше. Если это так, то почему у нас есть возможность рассказать JPA, как обрабатывать данные (может ли эта возможность использоваться на всех JPA автоматически это сделает)? – grep

+0

Как я уже сказал, это намек, а не требование. Некоторые варианты JPA могут учитывать этот намек или нет. В случае ленивых отношений с другими сущностями это почти всегда считается, а это означает, что почти всегда отношения ЛЮБИЛИ ЛЕНТА. –