Осталось присоединиться к выборке и предварительной загрузке - PullRequest
1 голос
/ 02 апреля 2011

У меня есть вопрос, когда у нас есть запрос типа Select DISTINCT A от A, выборка левого соединения ab JPA приведет к заполнению объекта A, и объект b, который является отношением oneToMany с a, будет предварительно выбран.Что именно означает предварительную выборку, потому что когда я отлаживаю этот объект, он имеет нулевые значения и в базе данных есть данные, поэтому я предполагаю, что это прокси-объект.Содержит ли прокси какие-либо данные, которые были предварительно выбраны из базы данных, и он заполняется только на ab, когда я на самом деле вызываю метод, подобный a.getB (). Size ()?

Я подумал, что если бы я использовал «выборку левого соединения», мне не нужно было бы вызывать a.getB (). Size (), но если я этого не сделаю, объект b останется какпрокси, а затем на уровне представления, если какой-либо объект вызывает какой-либо атрибут b, есть нулевой указатель.

Я мог бы также добавить, что этот объект b отображается как лениво загруженный, поэтому я использую выборку после этого.:) Кроме того, даже если я использую "левое соединение" и вызываю a.getB (). Size (), это не будет делать никаких дополнительных запросов, верно?предварительная выборка будет отвечать за получение всех данных b, ... мне нужно только вызвать метод, чтобы он передавал данные из прокси-сервера в реальный объект?

Заранее спасибо за любые объяснения, это действительно беспокоит меня ...

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Это зависит от вашей реализации JPA.

Насколько я знаю, по крайней мере с EclipseLink, если вы используете выборку соединения, атрибут всегда будет создаваться, а не нулевым.

0 голосов
/ 07 апреля 2011

Это может быть проблемой предложения DISTINCT, потому что здесь у вас есть отображение типа A-> B, поэтому в наборе результатов вы можете иметь несколько результатов A для B. Используйте Set collection для заполнения данных.

...